2016-05-16 20 views
5

Tôi nhận được luôn giá trị null từ cơ thể tại sao? Tôi không gặp vấn đề gì với việc sử dụng trình duyệt nhưng người đưa thư không thành công.Đăng dữ liệu json trong cơ thể lên web api

Tôi có một api web như thế:

[Route("api/account/GetToken/")] 
    [System.Web.Http.HttpPost] 
    public HttpResponseBody GetToken([FromBody] string value) 
    { 
     string result = value; 
    } 

dữ liệu đưa thư của tôi: enter image description here

và tiêu đề: enter image description here

+1

Không là cần phải được 'GetToken ([FromBody] chuỗi Tên truy nhập, [ FromBody] mật khẩu chuỗi) '? Hoặc bạn dự kiến ​​'giá trị' chứa toàn bộ chuỗi json? – Andrei

+0

tôi muốn chuyển dữ liệu của mình vào nội dung dưới dạng định dạng chuỗi json. Vấn đề trong mã của tôi là gì? – Mennan

Trả lời

8

WebAPI là làm việc như mong đợi bởi vì bạn đang nói với nó rằng bạn đang gửi đối tượng json này:

{ "username":"admin", "password":"admin" } 

Sau đó, bạn đang yêu cầu nó để deserialize nó như là một string đó là không thể vì nó không phải là một chuỗi JSON hợp lệ.

Giải pháp 1:

Nếu bạn muốn nhận được JSON thực tế như trong giá trị của value sẽ là:

value = "{ \"username\":\"admin\", \"password\":\"admin\" }" 

sau đó chuỗi bạn cần phải thiết lập cơ thể của các yêu cầu trong người đưa thư đến là:

"{ \"username\":\"admin\", \"password\":\"admin\" }" 

Giải pháp 2 (Tôi giả định điều này là những gì bạn muốn):

Tạo đối tượng C# khớp với JSON để WebAPI có thể deserialize nó đúng cách.

Đầu tiên tạo ra một lớp phù hợp với JSON của bạn:

public class Credentials 
{ 
    [JsonProperty("username")] 
    public string Username { get; set; } 

    [JsonProperty("password")] 
    public string Password { get; set; } 
} 

Sau đó, trong phương pháp của bạn sử dụng này:

[Route("api/account/GetToken/")] 
[System.Web.Http.HttpPost] 
public HttpResponseBody GetToken([FromBody] Credentials credentials) 
{ 
    string username = credentials.Username; 
    string password = credentials.Password; 
} 
3

Bạn đang đăng một đối tượng và cố gắng để ràng buộc nó vào một chuỗi. Thay vào đó, hãy tạo loại để đại diện cho dữ liệu:

public class Credentials 
{ 
    public string Username { get; set; } 
    public string Password { get; set; } 
} 

[Route("api/account/GetToken/")] 
[System.Web.Http.HttpPost] 
public HttpResponseBody GetToken([FromBody] Credentials value) 
{ 
    string result = value.Username; 
} 
Các vấn đề liên quan