2013-08-03 31 views
10

Tôi có bộ điều khiển sau nên chấp nhận tên người dùng và mật khẩu làm trọng tải trong POST. Nếu tôi thay đổi nó để HttpGet nó hoạt động.WebAPI - POST định tuyến thuộc tính không hoạt động với WebAPI Cors?

[RoutePrefix("api")] 
public class AccountController : ApiController 
{ 
    [HttpPost("login/{username}/{password}")] 
    [AcceptVerbs("POST")] 
    public Login Login(string username, string password) 
    { 
     Login login = new Login(); 
     if (username == "user" && password == "pw") login.Success = true; 
     else login.Success = false; 
     return login; 
    } 
} 

Yêu cầu OPTIONS có thể vượt qua nhưng POST không thành công.

enter image description here

OPTIONS tiêu đề:

enter image description here

OPTIONS phản ứng:

enter image description here

POST tiêu đề:

phản ứng

POST:

enter image description here

Bất kỳ ý tưởng những gì tôi đang làm sai?

Trả lời

14

Bạn đã xác định tuyến đường của bạn với [HttpPost("login/{username}/{password}")] nhưng bạn không gửi usename và password trong url nhưng trong cơ thể yêu cầu nên tuyến đường của bạn không phù hợp để bạn có được 404.

Vì vậy, bạn cần phải thay đổi tuyến đường của bạn để [HttpPost("login")]

Trong bản thân nó sẽ không làm việc bởi vì với Web.API bạn không thể có nhiều lý lẽ hành động đến từ các cơ quan yêu cầu, do đó bạn cần một loại phức tạp:

public class LoginInfo { 
    public string username { get; set; } 
    public string password { get; set; } 
} 

vì vậy, đối ac cố định tion sẽ trông giống như sau:

[HttpPost("login")] 
[AcceptVerbs("POST")] 
public Login Login(LoginInfo loginInfo) 
{ 
    Login login = new Login(); 

    if (loginInfo.username == "user" && loginInfo.password == "pw") { 
     login.Success = true; 
    } else { 
     login.Success = false; 
    } 

    return login; 
} 
+0

Tôi sẽ thử ngay lập tức. Nhưng như bạn thấy ở đây trong kịch bản 5 [HttpPost ("my/action1/{param1}/{param2")] nên hoạt động: https://aspnetwebstack.codeplex.com/wikipage?title=Attribute%20routing%20in%20Web% 20API – niklr

+0

Có điều đó sẽ làm việc vì trong trường hợp đó cả hai param1 và param2 đang đến từ URL và không phải là requst cơ thể như trong trường hợp của bạn. – nemesv

+1

Tại sao bạn sử dụng HttpPost sau đó? Làm cho không có ý nghĩa để mee. – niklr

Các vấn đề liên quan