为什么我不能让MvcHttpHandler来处理我的.mvc请求?

时间:2010-10-08 15:19:54

标签: asp.net-mvc iis-7 asp.net-mvc-routing

我有一个使用Asp.Net 3.5和MVC 1的项目。

一切都在我的本地IIS上完美运行,但在我将其部署到托管服务器后却没有。

Web服务器是IIS7,已激活集成管道(根据托管公司)。

当我访问网站www.site.com的根目录时,default.aspx会重定向到控制器,如下所示:

public void Page_Load(object sender,System.EventArgs e)
{
string originalPath = Request.Path;
HttpContext.Current.RewritePath(Request.ApplicationPath +“Controller.mvc / Action”,false);

IHttpHandler httpHandler = new MvcHttpHandler();
httpHandler.ProcessRequest(HttpContext.Current);
HttpContext.Current.RewritePath(originalPath,false);
}

这样可以显示正确的视图。但是,当我在浏览器中键入相同的地址时,www.site.com / Controller.mvc / Action会出现404.0错误。所以似乎没有正确调用MvccHttpHandler(?)。

使用runAllManagedModulesForAllRequests =“true”设置web.config,并配置MvcHttpHandler来处理.mvc扩展名。

我做错了什么,有什么想法?

2 个答案:

答案 0 :(得分:3)

这是一个涵盖不同部署方案的good article。在集成模式下部署到IIS 7时,无需特殊步骤。您default.aspx中不需要MvcHttpHandler.mvc文件以及web.config.mvc扩展名的关联。如果要在IIS 7.0中处理无扩展路由和在IIS 6.0中处理routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); // This is for IIS 6.0 routes.MapRoute( "DefaultWithExtension", "{controller}.mvc/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); // The default extensionless route working with IIS 7.0 and higher routes.MapRoute( "Default", "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); 扩展,那么这就是您的路由的样子。

.mvc

只有IIS 6.0才需要<httpHandlers> <add verb="*" path="*.mvc" validate="false" type="System.Web.Mvc.MvcHttpHandler, System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> </httpHandlers> 扩展名:

{{1}}

答案 1 :(得分:1)

原来我的托管公司以集成模式运行我的应用程序,即使他们告诉我。解决了我的问题,但我也从Darin那里得到了一些有用的提示。