Asp.net mvc 在ASP.NET MVC 3中路由静态文件,如robots.txt
我想有以下链接“http://mywebsite.com/robots.txt“链接到一个静态文件~/Content/robots.txt 我该怎么做 谢谢,Asp.net mvc 在ASP.NET MVC 3中路由静态文件,如robots.txt,asp.net-mvc,asp.net-mvc-routing,Asp.net Mvc,Asp.net Mvc Routing,我想有以下链接“http://mywebsite.com/robots.txt“链接到一个静态文件~/Content/robots.txt 我该怎么做 谢谢, Merijn解决方案1:如果指定URL。浏览器将向IIS或Web服务器请求此操作。MVC不参与读取文件等。它将这些请求交给IIS处理。您需要为该文件夹分配权限 解决方案2:如果有,请读取PresentationModel中的文件。分块读取此文件,并将其作为文件类型返回到浏览器 我希望它能给您一些指导。您可以设置磁盘文件的路由请求。默认情况
Merijn解决方案1:如果指定URL。浏览器将向IIS或Web服务器请求此操作。MVC不参与读取文件等。它将这些请求交给IIS处理。您需要为该文件夹分配权限 解决方案2:如果有,请读取PresentationModel中的文件。分块读取此文件,并将其作为文件类型返回到浏览器
我希望它能给您一些指导。您可以设置磁盘文件的路由请求。默认情况下,在评估应用程序的路由之前,路由系统会检查url是否与磁盘文件匹配。如果存在匹配项,则提供磁盘文件,并且不使用路由。但是,这可以重新设置,以便在检查磁盘文件之前通过将
RouteCollection
的RouteExisitingFiles
属性设置为true
查看路由。将此语句放在RegisterRoutes方法的顶部-这似乎是mvc应用程序的惯例。然后为磁盘文件定义一个路由。请注意,这样做可能会产生一些不可预见的效果,因为riute可能会natch其他类型的URL。添加这样的路由应该可以做到这一点。这样就可以提供任何静态的.txt文件,比如robots.txt
routes.IgnoreRoute("{resource}.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;
}
};
您可以安装Url重写模块:
请记住,此模块适用于IIS,而不是Cassini/IIS Express 并将以下规则添加到web.config部分
我在新的MVC 3.NET项目上检查了它,并使用相同的文件检查了两个url响应:
mywebsite.com/robots.txtmywebsite.com/Content/robots.txt看起来似乎没有人真正读过你的问题这在某种url重写模块中处理得更好。。。这将减少开销。这不起作用,我认为您需要使用下面列出的其他方法。我建议使用Url重写模块。这种技术对我来说非常有效。(我把它放在registerOutes()方法中RouteConfig.cs文件的顶部。)很好,但在重写1.0与Azure Web角色结合使用时要小心:)这仍然是URL重写2.0的问题吗?
BeginRequest += delegate
{
switch (Request.RawUrl.ToLowerInvariant())
{
case "/favicon.ico":
Context.RewritePath("~/Content/favicon.ico");
return;
case "/robots.txt":
Context.RewritePath("~/Content/robots.txt");
return;
}
};
<rewrite>
<rules>
<rule name="robots" stopProcessing="true">
<match url="robots.txt" />
<action type="Rewrite" url="/Content/robots.txt" />
</rule>
</rules>
</rewrite>