首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >方法使用asp.net WebAPI2.0CORS删除405错误。得到岗位投入的工作

方法使用asp.net WebAPI2.0CORS删除405错误。得到岗位投入的工作
EN

Stack Overflow用户
提问于 2016-03-24 08:10:41
回答 1查看 248关注 0票数 0

我正在努力解决一个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代码的错误,我该怎么办?

代码语言:javascript
运行
复制
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 }
        );
    }
}

EN

回答 1

Stack Overflow用户

发布于 2022-07-11 10:01:31

我在PUT方法上也有同样的问题。解决方案是自定义CORS策略提供程序。

EnableCors属性实现了EnableCors接口。您可以通过创建一个从属性派生并实现ICorsPolicyProvider.的类来提供自己的实现。

代码语言:javascript
运行
复制
[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的任何地方。

代码语言:javascript
运行
复制
[MyCorsPolicy]
public class TestController : ApiController
{
    .. //

例如,自定义CORS策略提供程序可以从配置文件中读取设置。

作为使用属性的替代方法,您可以注册创建ICorsPolicyProviderFactory对象的ICorsPolicyProvider对象。

代码语言:javascript
运行
复制
public class CorsPolicyFactory : ICorsPolicyProviderFactory
{
    ICorsPolicyProvider _provider = new MyCorsPolicyProvider();

    public ICorsPolicyProvider GetCorsPolicyProvider(HttpRequestMessage request)
    {
        return _provider;
    }
}

要在启动时设置ICorsPolicyProviderFactory,调用SetCorsPolicyProviderFactory扩展方法,如下所示:

代码语言:javascript
运行
复制
public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.SetCorsPolicyProviderFactory(new CorsPolicyFactory());
        config.EnableCors();

        // ...
    }
}

它应该可以工作,但是在部署之后,如果它不能工作,请在您的web.config中添加以下配置

代码语言:javascript
运行
复制
<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或重新启动应用程序池即可。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36195645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档