Asp.net WebApi - CORS 策略

Posted

技术标签:

【中文标题】Asp.net WebApi - CORS 策略【英文标题】:Asp.net WebApi - CORS policy 【发布时间】:2021-07-20 18:08:51 【问题描述】:

我有 Asp.net web api 项目作为后端 并将 js 反应为前端 我正在尝试通过我的 React 发出 api 请求,以使用我创建的后端的 api 端点从数据库获取或发布数据。

我第一次遇到 GET 和 POST 请求的 CORS 错误, 然后我将此添加到我的 Web.config 文件中

<system.webServer>
  <httpProtocol>
     <customHeaders>
       <add name="Access-Control-Allow-Origin" value="*" />
       <add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE,OPTIONS" />
       <add name="Access-Control-Allow-Headers" value="Content-Type, Accept, Pragma, Cache-Control, Authorization " />
     </customHeaders>
   </httpProtocol>
  </system.webServer>

现在 GET 工作正常,但 POST 不工作

获取

public IHttpActionResult Get(string password)
        
            if (password == "000")
            
                using (DbModel dbModel = new DbModel())
                
                    return Ok(dbModel.Provider_status.ToList());
                
            
            else
            
                return null;
            
        

发布

[HttpPost]
        public IHttpActionResult Post(List<Provider_status> rows)
        
            try
            
                using (DbModel dbModel = new DbModel())
                
                    dbModel.Provider_status.AddRange(rows);
                    dbModel.SaveChanges();
                
            
            catch  
            return Ok("record created");
        

【问题讨论】:

我在这里找到了解决方案***.com/questions/54632435/… 【参考方案1】:

安装 Cors 包。

    安装包 Microsoft.AspNet.WebApi.Cors

    在您的 WebApiConfig 中启用 Cors

    
        public static void Register(HttpConfiguration config)
        
            // New code
            config.EnableCors();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/controller/id",
                defaults: new  id = RouteParameter.Optional 
            );
        
    
    像这样装饰你的控制器
   [EnableCors(origins: "http://mywebclient.azurewebsites.net", headers: "*", methods: "*")]
    public class TestController : ApiController

来源:Microsoft Documentation

【讨论】:

我可以设置原点:“*”吗? [EnableCors(origins: "", headers: "", methods: "")] 我将它添加到我的控制器中,现在 GET 和 POST 执行不起作用,我收到此错误消息:被 CORS 策略阻止:“Access-Control-Allow-Origin”标头包含多个值“、*”,但只允许一个。 您可以将全局策略添加到您的 Web 配置中,例如: //Global Policies EnableCorsAttribute cors = new EnableCorsAttribute("", "", "GET,POST,UPDATE" ); config.EnableCors(cors);或 //为特定控制器启用 CORS config.EnableCors(); [EnableCorsAttribute("", "", "*")] 我在这里找到了解决方案***.com/questions/54632435/…

以上是关于Asp.net WebApi - CORS 策略的主要内容,如果未能解决你的问题,请参考以下文章

azure 应用服务和 asp.net 核心:CORS 策略甚至 AllowAnyOrigin 也阻止了来源

如何在我的 ASP.NET 核心 WebApi 项目中全局启用 CORS

Asp.Net Core WebAPI CORS 不工作

如何在 Asp.Net Core 3.0 WebAPI 中启用 CORS

ASP.NET WebAPI2 和 AngularJS

Blazor 无法连接到 ASP.NET Core WebApi (CORS)