将json数据发布到web api中

Men*_*nan 7 asp.net asp.net-web-api2 postman

我总是得到身体的空值为什么?使用fiddler我没有问题但邮递员失败了.

我有这样的网络API:

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

我的邮递员数据: 在此输入图像描述

和标题: 在此输入图像描述

Nas*_*ine 9

WebAPI按预期工作,因为您告诉它您正在发送此json对象:

{ "username":"admin", "password":"admin" }
Run Code Online (Sandbox Code Playgroud)

然后你要求它将其反序列化为一个string不可能的,因为它不是一个有效的JSON字符串.

解决方案1:

如果你想接收实际的JSON,那么值value将是:

value = "{ \"username\":\"admin\", \"password\":\"admin\" }"
Run Code Online (Sandbox Code Playgroud)

那么你需要在邮递员中设置请求主体的字符串是:

"{ \"username\":\"admin\", \"password\":\"admin\" }"
Run Code Online (Sandbox Code Playgroud)

解决方案2(我假设这是你想要的):

创建一个与JSON匹配的C#对象,以便WebAPI可以正确地反序列化它.

首先创建一个与您的JSON匹配的类:

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

    [JsonProperty("password")]
    public string Password { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后在你的方法中使用这个:

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