我一直在尝试在IIS 6上设置我的Beta 1 MVC应用程序,但无法让它正常运行。我已经按照其他博客文章的建议在.net isapi DLL中添加了通配符映射,但在访问网站根目录时出现以下错误:
The incoming request does not match any route.
..
[HttpException (0x80004005): The incoming request does not match any route.]
System.Web.Routing.UrlRoutingHandler.ProcessRequest(HttpContextBase httpContext) +147
System.Web.Routing.UrlRoutingHandler.ProcessRequest(HttpContext httpContext) +36
System.Web.Routing.UrlRoutingHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext context) +4
HCD.Intranet.Web.Default.Page_Load(Object sender, EventArgs e) +81
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +33
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +47
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1436
我正在使用MVC模板应用程序中提供的Default.aspx页面,该页面正确地重写了对网站根目录的访问。
public partial class Default : Page
{
public void Page_Load(object sender, System.EventArgs e)
{
HttpContext.Current.RewritePath(Request.ApplicationPath);
IHttpHandler httpHandler = new MvcHttpHandler();
httpHandler.ProcessRequest(HttpContext.Current);
}
}
如果我尝试访问应用程序中的路径,例如/ Project,我会收到标准的IIS 404错误页面,而不是.net错误页面。
我尝试将以下行添加到我的Web.config httpHandlers部分:
<add verb="*" path="*" validate="false" type="System.Web.Mvc.MvcHttpHandler, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
这给了我一个不同的错误 - .net 404错误页面。
我将以下内容添加到我的Global.asax中,它没有做任何事情:
protected void Application_BeginRequest(object sender, EventArgs e)
{
if (Context.Request.FilePath.Equals("/"))
Context.RewritePath("Default.aspx");
}
我正在使用以下路由配置(使用MvcContrib项目提供的restful路由):
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
SimplyRestfulRouteHandler.BuildRoutes(routes);
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" }
);
任何建议都会得到好评,因为我现在已经用尽了所有选项。
非常感谢。
答案 0 :(得分:18)
以下是我使用IIS 6和ASP.NET MVC Beta 1实现无扩展URL的方法。
您根本不需要更改web.config。您只需要将对IIS的所有请求映射到ASP.NET Isapi DLL,否则ASP.NET将永远不会收到这些请求。
答案 1 :(得分:8)
好的,让它运转起来。
问题是我使用msbuild自动化来打包我需要部署的文件,而我缺少global.asax。
所以看起来如果没有将global.asax部署到站点,那么没有任何路由被连接起来。这意味着正确访问网站根目录会导致错误“传入的请求与任何路由都不匹配。”,并且任何其他请求不再被路由到您的控制器类,因此导致404。
HTH。
答案 2 :(得分:1)
不幸的是,IIS 6需要一个文件扩展名来将请求映射到正确的处理程序,这意味着您必须在控制器名称上使用.mvc后缀,例如 / {controller} .mvc / {action} < / em>的
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
SimplyRestfulRouteHandler.BuildRoutes(routes);
routes.MapRoute(
"Default",
"{controller}.mvc/{action}/{id}",
new { controller = "Home", action = "Index", id = "" }
);
但是,这取决于您对IIS 6服务器的控制级别。有关更多信息,请参阅以下页面