我有一个使用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扩展名。
我做错了什么,有什么想法?
答案 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那里得到了一些有用的提示。