Rya*_*yan 2 asp.net-mvc asp.net-mvc-routing asp.net-mvc-4
所以这就是我的RouteConfig的样子:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapRoute("Robots.txt",
"robots.txt",
new {
controller = "Home",
action = "Robots",
id = "",
language = "en",
culture = "us"
});
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{language}/{culture}/{controller}/{action}/{id}",
new
{
controller = "Home",
action = "Index",
id = "",
language = "en",
culture = "us"
});
}
}
Run Code Online (Sandbox Code Playgroud)
现在根据我的理解,当我访问www.mysite.com/robots.txt时,网站应该路由到robots.txt,但事实并非如此.我在服务另一个静态页面时也遇到了问题,但我发现了一种解决方法,并且不必为静态.html页面提供服务.
我在MVC3中构建了另一个站点,我复制了我在那里使用的路由配置模式,它们似乎工作正常.任何想法为什么这不起作用?
PS当我浏览到www.mysite.com/en/US/Home/Robots时,我看到robots.txt文件就好了,所以所有的控制器,操作和视图都匹配得很好.
谢谢!
这可能是因为IIS认为它是一个静态文件,因为它的扩展并没有将它传递给托管管道进行处理.
您可以将以下处理程序添加到<system.webServer>web.config文件的部分,以便使所有请求/robots.txt都通过托管管道(从而通过您可能已设置的路径):
<system.webServer>
<handlers>
...
<add name="Robots" path="robots.txt" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
您也可以通过为所有请求启用托管模块来完成此工作,但我不建议您这样做,因为所有请求现在都将通过托管管道,这可能会产生额外的开销:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
...
</system.webServer>
Run Code Online (Sandbox Code Playgroud)