为 ASP .NET MVC 中的静态资源启用 CORS?
Posted
技术标签:
【中文标题】为 ASP .NET MVC 中的静态资源启用 CORS?【英文标题】:Enable CORS for static resources in ASP .NET MVC? 【发布时间】:2014-05-05 12:52:47 【问题描述】:我找到了大量关于 Web API 中的 CORS 和 ASP .NET MVC 中的通用控制器的资源。
但是,我希望特定文件夹中的所有静态资源(CSS 和 JS 文件)也可以通过 AJAX 下载。换句话说,为那些资源或那个文件夹启用 CORS。
我怎样才能做到这一点?我没有发现类似的问题。它们都与 Web API 或通用控制器有关。
【问题讨论】:
是否可以通过 IIS 为该文件夹设置Access-Control-Allow-Origin
标头?通过 AJAX 请求可以读取它们的原因是什么(只是想知道这听起来不寻常)?
它可能会 - 如果是这样,我如何为那个确切的文件夹设置该标题?另外,如果可能的话,我希望它不依赖于 IIS,而是依赖于代码。但如果没有其他方法,请分享如何做到这一点。
我想HTTP Module 会起作用。这可以拦截 HTTP 请求并附加标头(因此您可以将其设置为仅适用于来自特定文件夹的请求)。
你能发布一个简单模块的例子来解决这个问题吗?到时候我会把它标记为答案。
请问静态资源开启CORS的原因是什么?
【参考方案1】:
示例改编自Walkthrough: Creating and Registering a Custom HTTP Module。这应该将标头添加到所有 .js
和 .css
请求中。
创建模块
using System;
using System.Web;
public class HelloWorldModule : IHttpModule
public HelloWorldModule()
public String ModuleName
get return "HelloWorldModule";
// In the Init function, register for HttpApplication
// events by adding your handlers.
public void Init(HttpApplication application)
application.BeginRequest +=
(new EventHandler(this.Application_BeginRequest));
private void Application_BeginRequest(Object source,
EventArgs e)
// Create HttpApplication and HttpContext objects to access
// request and response properties.
HttpApplication application = (HttpApplication)source;
HttpContext context = application.Context;
string filePath = context.Request.FilePath;
string fileExtension =
VirtualPathUtility.GetExtension(filePath);
if (fileExtension.Equals(".css") || fileExtension.Equals(".js"))
context.Response.AddHeader("Access-Control-Allow-Origin", "*");
public void Dispose()
为以经典模式运行的 IIS 6.0 和 IIS 7.0 注册模块
<configuration>
<system.web>
<httpModules>
<add name="HelloWorldModule" type="HelloWorldModule"/>
</httpModules>
</system.web>
</configuration>
为在集成模式下运行的 IIS 7.0 注册模块
<configuration>
<system.webServer>
<modules>
<add name="HelloWorldModule" type="HelloWorldModule"/>
</modules>
</system.webServer>
</configuration>
在运行 MVC 时,请确保更改根目录中的那个(而不是 Views
文件夹)。
【讨论】:
出于好奇,ModuleName
属性是干什么用的?它不是您正在实现的接口的一部分。
@MathiasLykkegaardLorenzen 我认为它在 web.config 中匹配以上是关于为 ASP .NET MVC 中的静态资源启用 CORS?的主要内容,如果未能解决你的问题,请参考以下文章
asp.net MVC SignalR 与数据库 实时同步显示
如何使用 Angular 2 在 POST 上启用 ASP.NET MVC 4 中的跨源请求
在 ASP.Net 5 / Core 中启用跨域资源共享 (CORS)