当前位置:  开发笔记 > 后端 > 正文

IIS 6上的ASP.NET MVC - 通配符映射 - 传入请求与任何路由都不匹配

如何解决《IIS6上的ASP.NETMVC-通配符映射-传入请求与任何路由都不匹配》经验,为你挑选了2个好方法。

我一直在尝试在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部分:


这给了我一个不同的错误 - .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 = "" }
);

任何建议都会得到好评,因为我现在已经用尽所有选项了.

非常感谢.



1> Haacked..:

以下是我使用IIS 6和ASP.NET MVC Beta 1实现无扩展URL的操作.

创建一个默认的ASP.NET MVC Beta项目并进行编译.

创建指向应用程序目录的新IIS网站.

在网站的IIS属性中,单击"HomeDirectory"选项卡.

单击"配置..."按钮.在"映射"选项卡中,单击"插入..."

"通配符应用程序映射"标签旁边的文本框中,键入"c:\ windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll"

取消选中标记为"验证文件是否存在"的框,单击"确定"

导航到/ home它工作了!

您根本不需要更改web.config.您只需要将对IIS的所有请求映射到ASP.NET Isapi DLL,否则ASP.NET将永远不会获得这些请求.



2> 小智..:

好的,搞定了.

问题是我使用msbuild自动化来打包我需要部署的文件,而我缺少global.asax.

所以看起来如果没有将global.asax部署到站点,那么没有任何路由被连接起来.这意味着正确访问网站根目录会导致错误"传入的请求与任何路由都不匹配.",并且任何其他请求不再被路由到您的控制器类,因此导致404.

HTH.

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有