【问题标题】:asp.net mvc 3 and static resources 404'ing when using "Local IIS Web server"使用“本地 IIS Web 服务器”时的 asp.net mvc 3 和静态资源 404
【发布时间】:2011-03-16 10:01:14
【问题描述】:

情况如下:

  1. 使用 Razor 作为视图引擎的 ASP.NET MVC 3 应用程序。
  2. 在 Visual Studio Development Server (Cassini) 下运行良好
  3. 但是,当我切换到“使用本地 IIS Web 服务器”时,站点正常运行,但每个静态资源都是 404 秒(同样,在 Cassini 下没有问题)。
  4. ASP.NET 4.0、Windows 7 Ultimate x64、IIS 7.5、集成管道、网络服务作为应用程序池标识。

具体来说,尝试访问已知存在的静态文件的例外情况(即删除应用程序文件,特别是带有路由信息的 DLL 等,并且可以毫无问题地提供)。同样,所有静态文件都会出现这种情况,包括 /public/scripts/jquery.js:

路径错误:/favicon.ico 原始网址:/favicon.ico 消息:找不到路径“/favicon.ico”。 来源:System.Web 堆栈跟踪:在 System.Web.HttpNotFoundHandler.ProcessRequest(HttpContext 上下文) 在 System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 在 System.Web.HttpApplication.ExecuteStep(IExecutionStep 步骤,Boolean& completedSynchronously) TargetSite :Void ProcessRequest(System.Web.HttpContext) NLogLogger.Fatal => NLogLogger.Fatal => LoggerImpl.Write

我很困惑。我已经验证了一个测试默认 ASP.NET MVC 3 应用程序在这台机器上的 VS 开发服务器和本地 IIS Web 服务器下运行良好。

我希望其他人也遇到过类似的问题。如果有帮助,这是我的路线:

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute("favicon.ico");

        routes.MapRoute(
            "Login", // Route name
            "login", // URL with parameters
            new { controller = "Session", action = "Create" } // Parameter defaults
        );

        routes.MapRoute(
            "Logout", // Route name
            "logout", // URL with parameters
            new { controller = "Session", action = "Delete" } // Parameter defaults
        );

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );
    }

【问题讨论】:

    标签: asp.net-mvc-3


    【解决方案1】:

    当然,结果非常简单:在根 Web.config 中定义了一个 HttpHandler,而不仅仅是 View 目录的 Web.config

        <handlers>
            <remove name="BlockViewHandler" />
            <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
        </handlers>
    

    现在很明显,但希望通过在此处发布它可以避免其他人在如此明显的事情上浪费时间。请参阅http://haacked.com/archive/2008/06/25/aspnetmvc-block-view-access.aspx 了解更多信息。

    【讨论】:

    • 这解决了我们的问题,但还必须将行 &lt;modules runAllManagedModulesForAllRequests="true"/&gt; 添加到 &lt;system.webServer&gt; 部分
    猜你喜欢
    • 2019-12-16
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 2017-05-09
    • 1970-01-01
    • 2011-03-29
    • 2017-04-07
    • 2023-04-01
    相关资源
    最近更新 更多