Criando uma configuração de rota - RouteConfig

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