我想链接到静态文件〜/ Content/robots.txt的以下链接“http://mywebsite.com/robots.txt”。在robots.txt中路由ASP.NET MVC 3中的静态文件
我该怎么做?
感谢, Merijn
我想链接到静态文件〜/ Content/robots.txt的以下链接“http://mywebsite.com/robots.txt”。在robots.txt中路由ASP.NET MVC 3中的静态文件
我该怎么做?
感谢, Merijn
你可以安装URL重写模块: http://www.iis.net/downloads/microsoft/url-rewrite
记住这个模块工作在IIS上,而不是卡西尼/ IIS快递。
和你的web.config添加以下规则第<system.webServer>
<rewrite>
<rules>
<rule name="robots" stopProcessing="true">
<match url="robots.txt" />
<action type="Rewrite" url="/Content/robots.txt" />
</rule>
</rules>
</rewrite>
我检查新的MVC 3 .NET项目,并与同一个文件的URL响应: mywebsite.com/robots .TXT
mywebsite.com/Content/robots.txt
不错,但要谨慎使用Rewrite 1.0和Azure Web角色:) –
这仍然是URL Rewrite 2.0的问题吗? – jbolanos
解决方法1:如果您指定的URL。浏览器将向IIS或网络服务器请求此操作。 MVC不参与阅读文件等。它将这些请求提供给IIS进行处理。您需要为文件夹分配权限。
解决方案2:如果有,请阅读PresentationModel中的文件。在Chunks中读取此文件并将其作为文件类型返回给浏览器。
我希望它会给你一些方向。
您可以设置磁盘文件的路由请求。默认情况下,路由系统会在评估应用程序的路由之前检查url是否与磁盘文件匹配。如果存在匹配,则磁盘文件被提供并且不使用路由。但是,可以通过将RouteCollection
的RouteExisitingFiles
属性设置为true
来检查磁盘文件之前查看路由,以便查看路由。将此语句放在RegisterRoutes方法的顶部 - 这似乎是mvc应用程序的惯例。然后你为磁盘文件定义一个路由。请注意,这样做时可能会产生一些不可预见的效果,因为分歧可能会捕获其他类型的URL。
添加这样的路线应该有所斩获。这样可以提供任何静态.txt文件,如robots.txt。
routes.IgnoreRoute("{resource}.txt");
这不起作用,我想你需要使用下面列出的其他方法。我会建议Url重写模块。 –
这个技巧对我很好。 (我把它放在RegisterRoutes()方法的RouteConfig.cs文件的顶部。) – Greg
routes.MapRoute("Robots","robots.txt");
我能够通过重写路径中的事件处理程序在Global.asax中做到这一点的BeginRequest
。
BeginRequest += delegate
{
switch (Request.RawUrl.ToLowerInvariant())
{
case "/favicon.ico":
Context.RewritePath("~/Content/favicon.ico");
return;
case "/robots.txt":
Context.RewritePath("~/Content/robots.txt");
return;
}
};
看起来竟没有一个人读你的问题 – lostinplace
这在某种URL重写模块更好地处理......那就更少的开销。 – JayC