WebAPI CORS 和静态文件
Posted
技术标签:
【中文标题】WebAPI CORS 和静态文件【英文标题】:WebAPI CORS and static files 【发布时间】: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 处理。网。
【参考方案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"] = "*";
它非常广泛,但对我来说效果很好。
【讨论】:
以上是关于WebAPI CORS 和静态文件的主要内容,如果未能解决你的问题,请参考以下文章
尝试访问管理字体文件时,Django 在 AWS S3 中托管静态文件导致 CORS 错误