【问题标题】:WebAPI CORS and static filesWebAPI CORS 和静态文件
【发布时间】:2014-07-30 16:02:14
【问题描述】:

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

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

如果您直接访问静态文件,它们就可以很好地提供,但是如果我尝试将它们 ajax 到另一个域中,我会遇到 CORS 问题。

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

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

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

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

【问题讨论】:

  • 您提供的文件的content-type 是什么?您是如何处理的?
  • 也许 web.config 对你有用? enable-cors.org/server_iis7.html : <customHeaders> <add name="Access-Control-Allow-Origin" value="*" />
  • @AlexeiLevenkov 看起来可以工作,但我们不想向所有人开放,我们有一个允许客户的动态列表。有什么方法可以从代码中设置吗?
  • @Dalorzo 我想内容类型是 text/html ?它是一个静态文件,所以我认为 IIS 根据扩展名动态定义它
  • 据我所知,您无法在 web.config 中真正指定此属性的动态值,也无法使用代码更改静态文件响应,除非您强制所有请求由 ASP 处理。网。

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


【解决方案1】:

假设您使用 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"] = "*";
}

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

【讨论】:

    猜你喜欢
    • 2013-09-24
    • 2012-12-29
    • 2017-03-07
    • 2015-08-21
    • 2017-05-31
    • 1970-01-01
    • 2014-01-28
    • 2020-05-10
    • 2017-10-24
    相关资源
    最近更新 更多