【问题标题】:Why can't I get the MvcHttpHandler to handle my .mvc requests?为什么我不能让 MvcHttpHandler 处理我的 .mvc 请求?
【发布时间】:2011-04-22 23:02:48
【问题描述】:

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

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

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

当我转到网站的根目录 www.site.com 时,default.aspx 会像这样重定向到控制器:

public void Page_Load(object sender, System.EventArgs e)
{
字符串 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 扩展。

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

【问题讨论】:

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


    【解决方案1】:

    这是一个good article,它涵盖了不同的部署场景。在集成模式下部署到 IIS 7 时不需要特定步骤。您不需要default.aspx 文件和MvcHttpHandler.mvc 扩展名在web.config 中的关联。如果您想同时处理 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>
    

    【讨论】:

    • 感谢您的建议。但是,我的问题仍然存在。无论我是否使用 mvc-extensions,对我的控制器的任何请求都会给我一个 404.0 错误。我可以让它工作的唯一方法是通过 default.aspx 手动处理请求,这让我相信问题出在 MvcHttpHandler 上。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-30
      • 2014-07-22
      • 1970-01-01
      • 1970-01-01
      • 2011-01-16
      相关资源
      最近更新 更多