我对 PUT 方法也有同样的问题。解决方案是自定义 CORS 策略提供商。
The [启用Cors] 属性实现ICorsPolicyProvider界面。您可以通过创建一个派生自 Attribute 的类并实现ICorsPolicyProvider.
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = false)]
public class MyCorsPolicyProvider : Attribute, ICorsPolicyProvider
{
private CorsPolicy _policy;
public MyCorsPolicyProvider()
{
// Create a CORS policy.
_policy = new CorsPolicy
{
AllowAnyMethod = true,
AllowAnyHeader = true
};
// Add allowed origins.
_policy.Origins.Add("http://myclient.azurewebsites.net");
_policy.Origins.Add("http://www.contoso.com");
}
public Task<CorsPolicy> GetCorsPolicyAsync(HttpRequestMessage request)
{
return Task.FromResult(_policy);
}
}
现在您可以在任何放置 [ 的位置应用该属性启用Cors].
[MyCorsPolicy]
public class TestController : ApiController
{
.. //
例如,自定义 CORS 策略提供程序可以从配置文件中读取设置。
作为使用属性的替代方法,您可以注册ICorsPolicyProvider 工厂创建的对象ICorsPolicyProvider对象。
public class CorsPolicyFactory : ICorsPolicyProviderFactory
{
ICorsPolicyProvider _provider = new MyCorsPolicyProvider();
public ICorsPolicyProvider GetCorsPolicyProvider(HttpRequestMessage request)
{
return _provider;
}
}
要设置ICorsPolicyProvider 工厂,调用设置CorsPolicyProviderFactory启动时的扩展方法,如下:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.SetCorsPolicyProviderFactory(new CorsPolicyFactory());
config.EnableCors();
// ...
}
}
它应该可以工作,但是在部署之后如果它无法工作,请在 web.config 中添加以下配置
<system.webServer>
<modules>
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="WebDAV" />
<remove name="OPTIONSVerbHandler" />
<add name="OPTIONSVerbHandler" path="*" verb="OPTIONS" modules="ProtocolSupportModule" requireAccess="None" responseBufferLimit="4194304" />
</handlers>
</system.webServer>
部署后只需执行以下操作IISRESET或重新启动App pool
谢谢