我正在努力解决一个ASP.Net WebAPI2.0问题,CORS (交叉源资源共享).I安装了ASP.Net.Web.API 2.0 CORS包,并启用了cors.no webdav.defualt webconfig,就像这样(参见http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api) --放置、获取和发布工作,删除带有405代码的错误,我该怎么办?
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
EnableCorsAttribute cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
发布于 2022-07-11 10:01:31
我在PUT方法上也有同样的问题。解决方案是自定义CORS策略提供程序。
EnableCors属性实现了EnableCors接口。您可以通过创建一个从属性派生并实现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);
}
}
现在,您可以将属性应用于放置EnableCors的任何地方。
[MyCorsPolicy]
public class TestController : ApiController
{
.. //
例如,自定义CORS策略提供程序可以从配置文件中读取设置。
作为使用属性的替代方法,您可以注册创建ICorsPolicyProviderFactory对象的ICorsPolicyProvider对象。
public class CorsPolicyFactory : ICorsPolicyProviderFactory
{
ICorsPolicyProvider _provider = new MyCorsPolicyProvider();
public ICorsPolicyProvider GetCorsPolicyProvider(HttpRequestMessage request)
{
return _provider;
}
}
要在启动时设置ICorsPolicyProviderFactory,调用SetCorsPolicyProviderFactory扩展方法,如下所示:
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或重新启动应用程序池即可。
https://stackoverflow.com/questions/36195645
复制相似问题