WebAPI CORS和静态文件

时间:2014-06-10 01:59:36

标签: c# asp.net-web-api cors

我有一个WebApi,它启用了CORS并且运行良好。

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

如果直接转到静态文件就可以正常提供,但是如果我尝试在另一个域上调用它们,我就会遇到CORS问题。

有问题的实际文件是静态的.html文件。

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

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

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

1 个答案:

答案 0 :(得分:0)

假设您将IAppBuilder.UseFileServer(...)FileServerOptions一起使用来提供静态文件,则可以在其中添加CORS标头。

var options = new FileServerOptions
{  
  ...           
  StaticFileOptions =
  {
    OnPrepareResponse = AddCorsHeader
  },
  ...
};

您的处理程序可以是(例如):

private static void AddCorsHeader(StaticFileResponseContext obj)
{
  obj.OwinContext.Response.Headers["Access-Control-Allow-Origin"] = "*";
}

范围很广,但对我来说效果很好。