2016-02-22 58 views
1

我试图对ASP.NET 5 Web Api控制器操作执行跨域POST请求。 我总是收到以下错误:“XMLHttpRequest无法加载http://localhost:8082/app/users。请求的资源上没有'Access-Control-Allow-Origin'标头,原因'http://localhost:20724'因此不被允许访问,响应的HTTP状态码为500。 “ 奇怪的只有它发生在POST方法。其他方法工作正常(GET,PUT) 这是我的API配置(Startup.cs):CORS不能使用ASP NET 5 Web Api

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); 

我在做什么错?

UPDATE

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

+0

您是否在启动时添加了CORS配置? https://docs.asp.net/projects/mvc/en/latest/security/cors-policy.html –

+0

是的,我喜欢。我的问题只是POST方法。其他人工作正常。 – ratillo89

+0

我没有看到你的代码有什么问题。如果什么都没有发生,我会建议在asp.net mvc github页面上打开一张票(https://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); 
    } 
+0

对不起,我需要配置ASP NET 5 Web Api(新)。我的配置必须在Startup.cs类中 – ratillo89