大家好我在我的控制器中有一个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时,它应该转到操作并重新生成文件,但这不起作用,任何人都可以帮助我
答案 0 :(得分:1)
请你试试这个自定义路线,
将其添加到RouteConfig.cs文件
routes.MapRoute(
name: "Sitemap",
url: "Sitemap",
defaults: new { controller = "Home", action = "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}}
的更多信息