Meus cursos online - https://ecode10.academy

Olá pessoal, meu nome é Mauricio Junior e hoje eu vou falar um pouco sobre configuração de rota do web service. Trabalhando na empresa eu vi que a primeira página do web service legado sempre aparece uma página em primeiro local, parecendo uma página de erro. O Web Service é antigo e não tem Swagger e a gerência informou para não colocar ele no sistema, mas eu gostaria de mudar a primeira página da Api para saber que a versão que eu mandei publicar é a publicada. É muito importante saber se a versão é a mesma ou não, ou seja, se o código que você colocou está lá ou não.

Veja a página que aparce toda vez que eu inicio ou acesso web service / api. Image 1.

image

Image 1 - Página principal da Api legada

Se eu acesso uma página dessas, a primeira coisa que eu penso é: está dando um erro aqui e eu preciso arrumar, mas na verdade não, só não existe uma primeira página configurada para carregar a primeira vez. Agora eu mostrar como carregar essa primeira página de forma bem simples e fácil.

Muito doido esse erro né Mauricio Junior HTTP Error 403.14 - Forbidden. The Web server is configured to not list the contents of this directory.

Passo 1 - RouteConfig

O primeiro passo é crair uma classe dentro da pasta App_Start chamada RouteConfig.cs. Veja o código 1.

using System.Web.Mvc;
using System.Web.Routing;

namespace [Your_Project].App_Start
{
    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    }
}

Código 1 - Criando a classe RouteConfig.cs

Criei uma classe normal com o nome RouteConfig.cs dentro da pasta App_Start e adicionei o código 1. O método criado foi o RegisterRoutes(ReouteCollection routes) que informa como principal defaults a controller Home que já existe em seu código, pode ver que existe a controller HomeController dentro da pasta Controllers. Basta fazer isso para a rota.

Agora eu preciso alterar a Controller para deixar de retornar View() para retornar uma página com a versão da Api que eu desejo pegar.

Passo 2 - Alterar HomeController

Agora eu preciso alterar a HomeController que já está no código da Api. Bastou retirar o return View() para colocar a versão do código colocado dentro do AssemblyInfo.cs. Veja o código 2.

using System.Diagnostics;
using System.Reflection;
using System.Web.Mvc;

namespace [Your_Project].Controllers
{
    /// <summary>
    /// Home page for the Web API
    /// </summary>
    public class HomeController : Controller
    {
        /// <summary>
        /// Get view
        /// </summary>
        /// <returns>View</returns>
        public ActionResult Index()
        {
            var version = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).FileVersion;
            return base.Content($"<div style='font-family:verdana; text-align:center;'><br/><br/><h2>Welcome the Web Service</h2> <br/>Version: {version}</div>", "text/html");
        }
    }
}

Código 2 - Alterando a HomeController

Veja que o único método da controller é o Index() e a primeira linha do método eu pego a versão do código.

var version = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).FileVersion;

Código 3 - Pegando a versão que está dentro do AssemblyInfo.cs

Depois eu preciso retornar um conteúdo para exibir na página já que eu não tenho nenhuma View para essa controller. Para isso é necessário utilizar o método base.Content e colocar uma página html dentro.

return base.Content($"<div style='font-family:verdana; text-align:center;'><br/><br/><h2>Welcome to Mobile Hub Service</h2> <br/>Version: {version}</div>", "text/html");

Código 4 - Retornando o HTML

Note que no código 4, eu adiciono uma div que é basicamente HTML com a variável version dentro e no final eu coloco que o texto retornado é do tipo text/html. Mas ainda não acabou, é necessário informar à Api que existe uma rota configurada para a primeira página.

Passo 3 - Registar a Rota no Global.asax.cs

Agora é necessário fazer o registro da Rota dentro do método Application_Start para que tudo funcione perfeitamente. Veja o código 5.

namespace [Your_Project] { // Note: For instructions on enabling IIS6 or IIS7 classic mode, // visit http://go.microsoft.com/?LinkId=9394801

public class WebApiApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        GlobalConfiguration.Configure(WebApiConfig.Register);
        
        //add first page friendly
        //check /App_Start/RouteConfig.cs
        //check /Controllers/HomeController.cs
        RouteConfig.RegisterRoutes(RouteTable.Routes);

        GlobalConfiguration.Configuration.MessageHandlers.Insert(
            0,
            new ServerCompressionHandler(new GZipCompressor(), new DeflateCompressor()));

        GlobalConfiguration.Configuration.MessageHandlers.Insert(
            0,
            new RequestHeaderHandler());
    }
}

}

Código 5 - Registrando no Global

Eu apenas coloquei a linha de código para RouteConfig.RegisterRoutes.

RouteConfig.RegisterRoutes(RouteTable.Routes);

Código 6 - RegisterRoutes

Depois disso, a Api vai mostrar uma página nova com a versão do assembly de forma simples e amigável. Bem mais bonito do que ver uma página de erro. Veja a imagem 2.

image

Bom, eu fico por aqui e espero que você tenha gostado. Qualquer dúvida pode entrar em contato comigo pelo site ecode10.com e tem alguns cursos meus na plataforma ecode10.academy que você pode ver mais vídeos e detalhes de programação.

Meus cursos online - https://ecode10.academy