所以这就是我的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"
});
}
}
根据我的理解,当我访问www.mysite.com/robots.txt时,网站应该路由到robots.txt,但事实并非如此。我在服务另一个静态页面时也遇到了问题,但是我发现了一种解决方法,并且不需要提供静态的.html页面。
我在MVC3中构建了另一个站点,我复制了我在那里使用的路由配置模式,它们似乎工作正常。任何想法为什么这不起作用?
P.S。当我浏览到www.mysite.com/en/US/Home/Robots时,我看到robots.txt文件就好了,所以所有的控制器,动作和&视图匹配得很好。
谢谢!
答案 0 :(得分:6)
这可能是因为IIS认为它是一个静态文件,因为它的扩展名并没有将它传递给托管管道进行处理。
您可以将以下处理程序添加到web.config文件的<system.webServer>
部分,以便使对/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>
您也可以通过为所有请求启用托管模块来完成此工作,但我不建议您这样做,因为所有请求现在都将通过托管管道,这可能会产生额外的开销:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
...
</system.webServer>