我有一个运行API服务的Azure webrole。我尝试启用CORS,以便浏览器脚本可以使用API。有很多问题涉及在web-api应用程序上启用CORS,但我还没有找到能够为 webroles 提供答案的问题。
我已尝试将this answer中的神奇自定义标题块添加到我的web.config中,但这并不起作用。
来自Microsoft的This document暗示可能会使用 Microsoft.AspNet.Cors nuget包,但我不清楚如何获取 HttpConfiguration < / strong>来自webrole OnStart 方法。我必须装饰每一个API方法,这似乎很奇怪。是不是没有一个单一的开关&#39;我可以轻弹以启用整个服务的CORS吗?
相关问题......
验证CORS实际启用的最简单方法是什么?目前我正在使用Blazor PostJsonAsync调用并依赖它来通过,但它反复重新配置并将角色上传到Azure以尝试更改。
更大的问题......我是否正在使用webrole与潮流作斗争?许多文档都涉及web-api和web-apps。也许这些是未来,webroles已被弃用?
答案 0 :(得分:1)
我还建议转到webapps。但是,如果使用OWIN,您也可以使用它来处理Web角色以及如何应用cors也适用于webapp。
您可以在网络角色中托管您的API,如下所示:
这为您提供了所需的HttpConfiguration
(Startup.cs
)。
我必须装饰每一个API方法,这似乎很奇怪。是不是没有一个单一的开关&#39;我可以轻弹以启用整个服务的CORS吗?
您可以使用ICorsPolicyProvider
在任何地方启用它:
// in startup.cs
config.EnableCors(new AllowAllCorsPolicyProvider());
public class AllowAllCorsPolicyProvider : ICorsPolicyProvider
{
readonly CorsPolicy _CorsPolicy;
public AllowAllCorsPolicyProvider()
{
_CorsPolicy = new CorsPolicy {AllowAnyHeader = true, AllowAnyMethod = true, AllowAnyOrigin = true};
}
public Task<CorsPolicy> GetCorsPolicyAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
return Task.FromResult(_CorsPolicy);
}