C# WebAPI CORS和静态文件
我有一个WebApi,它支持CORS,并且工作得很好 我想添加由API提供的静态文件,以补充实际的WebAPI方法 如果您直接访问静态文件,静态文件就可以正常运行,但是如果我尝试在另一个域中使用ajax,我会遇到CORS问题 实际的文件是一个静态的.html文件 我真的不想创建一个包装器控制器来提供静态文件,因为如果我动态地这样做,它会打开一堆安全问题 我目前正在使用一个定制的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
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"] = "*";
}