CORS 不适用于 ASP NET 5 Web Api

Posted

技术标签:

【中文标题】CORS 不适用于 ASP NET 5 Web Api【英文标题】:CORS not working with ASP NET 5 Web Api 【发布时间】:2016-06-04 08:59:11 【问题描述】:

我正在尝试对 ASP.NET 5 Web Api 控制器操作执行跨域 POST 请求。 我总是收到以下错误:“XMLHttpRequest cannot load http://localhost:8082/app/users.No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:20724' is not allowed access. The response has HTTP status代码 500。” 奇怪的是,只有 POST 方法才会发生这种情况。其他方法工作正常(GET,PUT) 这是我的 API 配置(Startup.cs):

public void ConfigureServices(IServiceCollection services)

 services.AddCors(options =>
            
                // Define one or more CORS policies
                options.AddPolicy("AllowAll", builder => 
                    builder.AllowAnyOrigin()
                        .AllowAnyMethod()
                        .AllowAnyHeader());
            );

还有控制器:

[EnableCors("AllowAll")]
[Route("app/[controller]")]
public class UsersController : Controller

// POST api/users
[HttpPost]
public IActionResult Post([FromBody]UserEntity user)
           
    if (!ModelState.IsValid) //Valida el modelo recibido 'user'
        return new HttpStatusCodeResult(422); 
    else
    
        UserEntity userCreated = _userServices.CreateUser(user);

        if(userCreated != null)
            return CreatedAtRoute("GetUserById", new  controller = "Users", id = userCreated.Id , userCreated);
        else
            return new HttpStatusCodeResult(500);
    

我的客户是 angularjs。这是代码:

$http.post(Config.apiHost + "users", user);

我做错了什么??

更新

我已经解决了这个问题。尽管浏览器显示 CORS 错误,但我在 POST 方法上遇到内部错误。

【问题讨论】:

你在启动时添加了CORS配置吗? docs.asp.net/projects/mvc/en/latest/security/cors-policy.html 是的,我愿意。我的问题只是 POST 方法。其他人工作正常。 我看不出你的代码有什么问题。如果没有任何反应,我建议在 asp.net mvc github 页面 (github.com/aspnet/mvc/issues) 上开一张票 【参考方案1】:

这就是我在工作的 Web Api 中所拥有的。 这在 App_Start => WebApiConfig.cs 文件中。

    public static void Register(HttpConfiguration config)
    

       //this enables it by calling the that method defined below.
        EnableCrossSiteRequests(config);

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/controller/id",
            defaults: new  id = RouteParameter.Optional 
        );
    

    private static void EnableCrossSiteRequests(HttpConfiguration config)
    
        var cors = new EnableCorsAttribute(
            origins: "*",
            headers: "*",
            methods: "*");
        config.EnableCors(cors);
    

【讨论】:

抱歉,我需要配置 ASP NET 5 Web Api(新)。我的配置必须在 Startup.cs 类中

以上是关于CORS 不适用于 ASP NET 5 Web Api的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core CORS 配置不适用于 Firefox

通过 Web.config 启用 CORS 不适用于 .net WebApi

.NET Web API CORS 不适用于所有路由

Web Api 2 CORS 不适用于 POST

xmlHttp.getResponseHeader + 不适用于 CORS

ASP.NET 5:Azure Web 应用 CORS 在延迟后停止工作