Asp.net mvc 为什么可以';我不能让MvcHttpHandler来处理我的.mvc请求吗?

Asp.net mvc 为什么可以';我不能让MvcHttpHandler来处理我的.mvc请求吗?,asp.net-mvc,iis-7,asp.net-mvc-routing,Asp.net Mvc,Iis 7,Asp.net Mvc Routing,我有一个使用Asp.NET3.5和MVC1的项目 一切都在我的本地IIS上完美运行,但在我将其部署到托管服务器之后就不会了 web服务器是IIS7,集成管道已激活(根据托管公司) 当我转到网站的根目录www.site.com时,default.aspx会重定向到控制器,如下所示: 公共无效页面加载(对象发送方,System.EventArgs e) { string originalPath=Request.Path; HttpContext.Current.RewritePath(Reques

我有一个使用Asp.NET3.5和MVC1的项目

一切都在我的本地IIS上完美运行,但在我将其部署到托管服务器之后就不会了

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

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

公共无效页面加载(对象发送方,System.EventArgs e)
{
string originalPath=Request.Path;
HttpContext.Current.RewritePath(Request.ApplicationPath+“Controller.mvc/Action”,false);
IHttpHandler httpHandler=新的MVHttpHandler();
httpHandler.ProcessRequest(HttpContext.Current);
HttpContext.Current.RewritePath(originalPath,false);
}

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

web.config是使用runAllManagedModulesForAllRequests=“true”设置的,MVCHTTPDHandler配置为处理.mvc扩展

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

这里有一个例子,介绍了不同的部署场景。在集成模式下部署到IIS 7时,不需要特殊步骤。您不需要
default.aspx
文件以及
MvcHttpHandler
web.config中的
.mvc
扩展名的关联。如果您希望处理IIS 7.0中的无扩展路由和IIS 6.0中的
.mvc
扩展,则以下是路由的外观

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 }
);
只有IIS 6.0才需要
.mvc
扩展:

<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>

下面是一个涵盖不同部署场景的示例。在集成模式下部署到IIS 7时,不需要特殊步骤。您不需要
default.aspx
文件以及
MvcHttpHandler
web.config中的
.mvc
扩展名的关联。如果您希望处理IIS 7.0中的无扩展路由和IIS 6.0中的
.mvc
扩展,则以下是路由的外观

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 }
);
只有IIS 6.0才需要
.mvc
扩展:

<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>


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

结果是我的托管公司没有以集成模式运行我的应用程序,尽管他们告诉我。解决了我的问题,但我也从Darin那里得到了一些有用的建议。

谢谢你的建议。然而,我的问题仍然存在。无论我是否使用mvc扩展,对控制器的任何请求都会给我一个404.0错误。我能让它工作的唯一方法是通过default.aspx手动处理请求,这让我相信问题出在MVHttpHandler上。谢谢你的建议。然而,我的问题仍然存在。无论我是否使用mvc扩展,对控制器的任何请求都会给我一个404.0错误。我能让它工作的唯一方法是通过default.aspx手动处理请求,这让我相信问题出在MvcHttpHandler上。