将js文件放在views文件夹中

Val*_*mas 12 routes asp.net-mvc-3

我正在尝试将我的javascript文件放在我的视图中.

我有以下js文件位置./Views/Home/Home.js

但是,当使用脚本标记引用时,会导致404错误.

根据以下SO问题:ASP.NET MVC - 如果您不想将它们存储在/ Scripts中,您在哪里放置.js文件?

我将file.js添加到我的Register路由中.(没解决问题)

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{file}.js");
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    }
Run Code Online (Sandbox Code Playgroud)

如何在我的视图旁边存储和引用我的js文件?

goe*_*ing 27

问题是,出于安全原因,Views文件夹中的web.config阻止对该文件夹中文件的所有请求.这是您将在配置文件中找到的内容:

<httpHandlers>
  <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>
Run Code Online (Sandbox Code Playgroud)

对于IIS7:

<handlers>
  <remove name="BlockViewHandler"/>
  <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
Run Code Online (Sandbox Code Playgroud)

您可以更改通配符以仅捕获.cshtml文件.

<httpHandlers>
  <add path="*.cshtml" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>
Run Code Online (Sandbox Code Playgroud)

<handlers>
  <remove name="BlockViewHandler"/>
  <add name="BlockViewHandler" path="*.cshtml" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
Run Code Online (Sandbox Code Playgroud)

使用此通配符,不会阻止.js文件.

  • 根据http://stackoverflow.com/questions/604883/where-to-put-view-specific-javascript-files-in-an-asp-上的答案,将您明确要允许的文件列入白名单无疑是更安全的. net-mvc-application而不仅仅是过滤cshtml文件本身的请求. (3认同)