将静态URL路由到MVC中的Controller操作?

时间:2015-05-27 12:36:05

标签: c# asp.net-mvc-5 asp.net-mvc-routing

大家好我在我的控制器中有一个aciton为我的网站生成一个站点地图,这里的问题是第一次当文件不存在时请求转到行动 但是一旦生成了文件,就会在站点中放置一个静态文件,之后当我点击URL时,请求不会进入控制器,是否有针对此的修复

Below is the URL

        http://localhost:1234/sitemap.xml

Below is the code am using

        [HttpGet, ActionName("sitemap")]
        public ActionResult sitemap()
        {           

           //will get the sitemap content here and will generate the sitemap 
            var sitemapFile = "~/sitemap.xml";
            return File(sitemapFile, "text/xml");
        }

每当我点击URL时,它应该转到操作并重新生成文件,但这不起作用,任何人都可以帮助我

2 个答案:

答案 0 :(得分:1)

请你试试这个自定义路线,

将其添加到RouteConfig.cs文件

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

您可以像这样访问您的行动

  

http://localhost:1234/sitemap

希望你正在寻找它。

答案 1 :(得分:1)

当您的sitemap.xml文件存在时,IIS将接收请求并提供现有的sitemap.xml。有关此问题的更多信息,请查看this article

如果我理解正确,您希望将sitemap.xml requests路由到MVC route,那么blog post就是好的RouteExistingFiles

首先需要做的是将sitemap.xml的请求映射到TransferRequestHandler。将其添加到您的web.config

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

接下来在RouteConfig.cs中配置路由:

routes.MapRoute(
    name: "SiteMapRoute",
    url: "sitemap.xml",
    defaults: new { controller = "SEO", action = "Sitemap", page = UrlParameter.Optional }
);

在映射任何路径之前放置此语句

routes.RouteExistingFiles = true;

有关{{3}}

的更多信息