Arquivo XML no ASP .NET MVC 5


Como muito de vocês sabem, não é possível retornar um arquivo estático (.xml) no asp net mvc 5, porém podemos mascarar de tal forma que pareça que estamos retornando um arquivo estático.

1 - Crie um método no "Home (controller)" do seu projeto, por exemplo:

[Route("sitemap.xml")]
public ActionResult SitemapXml()
{
    var _sitemap = new Sitemap();

    var sitemapNodes = _sitemap.GetSitemapNodes(this.Url);
    string xml = _sitemap.GetSitemapDocument(sitemapNodes);
    return this.Content(xml, "text/xml", Encoding.UTF8);
}

2 - Observe que na primeira linha foi adicionado o código "[Route("sitemap.xml")]" esse vai ser responsável por fazer o direcionamento da rota.

3 - Na última linha foi adicionado a resposta (no meu exemplo estou mondando o xml em tempo de execução). Neste ponto pode-se fazer a leitura de um arquivo xml que esteja no diretório e etc.

4 - Agora precisamos configurar esta rota no "RouteConfig.cs":

routes.MapRoute(
    name: "sitemap.xml",
    url: "sitemap.xml",
    defaults: new { controller = "Home", action = "SitemapXml" }
);

Observe que criamos uma rota com o nome "sitemap.xml" e a url é o nome do arquivo "sitemap.xml (no meu caso)" e o controller apontado para o Home, e o Action para o método gerado no ítem 1. Dessa forma, ao digitar www.suaurl.com.br/sitemap.xml o asp net vai redirecionar para www.suaurl.com.br/Home/SitemapXml (este nome não vai aparecer na url).

5 - Agora precisamos configurar o web.config para aceitar resposta com conteúdo xml, para tal, adicione o código abaixo na seção <sytem.webServer>:

<handlers>
  <add name="SitemapXml" path="sitemap.xml" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>

E é isso aí pessoal... aceito dúvidas, sugestões e críticas :).

aspnet · ‎mvc5 · ‎xml · ‎asp · ‎net · ‎mvc · ‎arquivo

Última atualização: 12/12/2017 às 11:39


  • Buscar