c# - 为什么 CSS 和 JS 文件绕过 Asp.Net MVC 路由?

标签 c# asp.net asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing

我收到了一个使用 Asp.Net MVC4 构建的原型(prototype)应用程序。它目前正在用一个使用 NInject、ServiceLocator 和所有的自定义 Controller 工厂替换默认 Controller 工厂。

问题在于,通过替换默认 Controller 工厂,对 JS 文件的请求被视为对 Controller 和操作的合法请求。

因此,查看 Visual Studio 创建的默认模板,路由配置如下所示:

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

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id =   UrlParameter.Optional }
    );
}

看完之后,我问自己:为什么 Asp.Net MVC 无法解释对“/Scripts/jquery.js”的请求?我的意思是,为什么它不认为“Script”是一个 Controller 而“jquery.js”是一个 Action ?

因为如果我禁用 Controller 工厂覆盖,项目就可以工作,所以我只能假设默认工厂负责那种检查。这意味着“/Scripts/jquery.js”确实传递给了 Controller 工厂,这是我真的不知道的事情。

任何人都可以阐明这一点吗?

在覆盖controller factory时应该做什么样的处理才能避免此类问题?

最佳答案

这不是因为 MVC 如何处理对 jquery.js 的请求,而是因为 IIS 处理对 jquery.js 的请求的方式。 IIS 假定.js、.jpg 等资源都是静态资源,因此不需要通过ASP.NET 引擎传递它们。为了防止这种情况发生,您可以在 web.config 中添加一行,作为您希望 IIS 保留的路径。

<system.webserver>
    <handlers>
    <add name="scripts" path="/Scripts/*" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"/>
    </handlers>
</system.webserver>

添加类似的东西应该允许您的 JS 文件通过 ASP.NET 提供服务,而不是直接通过 IIS。

关于c# - 为什么 CSS 和 JS 文件绕过 Asp.Net MVC 路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16948933/

相关文章:

mysql - 是否可以将 ASP.NET MVC 应用程序映射到多个数据库?

c# - 在 Entity FrameWork 中为多种用途映射相同的模型类

c# - 如何创建更加用户友好的 string.format 语法?

c# - 使用 IEquatable<T> 测试对象集合的相等性

c# - 阻止用于访问资源的危险 IP

asp.net - 使用 Jquery 检查 URL 是否有效

c# - 如何将 CreateObject ("Wscript.shell") 翻译成 C#

c# - 使用反射获取静态类列表

asp.net - HTTPModules 和 Global.asax -- ASP.NET 页面生命周期

asp.net-mvc - ASP.NET Web API 中简单属性的自定义类型转换器