C# WebAPI CORS和静态文件

C# WebAPI CORS和静态文件,c#,asp.net-web-api,cors,C#,Asp.net Web Api,Cors,我有一个WebApi,它支持CORS,并且工作得很好 我想添加由API提供的静态文件,以补充实际的WebAPI方法 如果您直接访问静态文件,静态文件就可以正常运行,但是如果我尝试在另一个域中使用ajax,我会遇到CORS问题 实际的文件是一个静态的.html文件 我真的不想创建一个包装器控制器来提供静态文件,因为如果我动态地这样做,它会打开一堆安全问题 我目前正在使用一个定制的DelegatingHandler(不是WebAPI2内置方式)执行CORS,但是静态文件不会调用此处理程序 我如何在W

我有一个WebApi,它支持CORS,并且工作得很好

我想添加由API提供的静态文件,以补充实际的WebAPI方法

如果您直接访问静态文件,静态文件就可以正常运行,但是如果我尝试在另一个域中使用ajax,我会遇到CORS问题

实际的文件是一个静态的.html文件

我真的不想创建一个包装器控制器来提供静态文件,因为如果我动态地这样做,它会打开一堆安全问题

我目前正在使用一个定制的
DelegatingHandler
(不是WebAPI2内置方式)执行CORS,但是静态文件不会调用此处理程序


我如何在WebAPI中拦截静态文件请求并在适用的情况下应用相关的CORS头?

假设您正在使用
IAppBuilder.UseFileServer(…)
文件服务器选项
为您的静态文件提供服务,您可以在那里添加CORS头

var options = new FileServerOptions
{  
  ...           
  StaticFileOptions =
  {
    OnPrepareResponse = AddCorsHeader
  },
  ...
};
您的处理程序可以是(例如):


它非常广泛,但对我来说很好。

您提供的文件的
内容类型是什么,您是如何做到的?也许web.config适合您:
@AlexeiLevenkov这看起来是可行的,但我们不想向所有人开放,我们有一个动态的允许客户端列表。我们有没有办法从代码中设置它?@Dalorzo我想内容类型是text/html?它是一个静态文件,所以我认为IIS基于扩展动态定义它。据我所知,您无法在web.config中为该属性指定动态值,并且除非强制ASP.Net处理所有请求,否则无法使用代码更改静态文件响应。
private static void AddCorsHeader(StaticFileResponseContext obj)
{
  obj.OwinContext.Response.Headers["Access-Control-Allow-Origin"] = "*";
}