导致参数为空的原因是什么?

时间:2017-09-26 15:18:55

标签: asp.net-core http-post asp.net-core-webapi

我正在使用Asp.Net Core 2.0和web api来构建休息服务。除HTTPPost外,一切正常。

[HttpPost("LoginUser")]
public IActionResult LoginUser(LoginUser loginUser)
{
   return Ok(loginUser);
}

loginUser始终为null。我正在用小提琴手测试,我的路线是http://localhost:53250/api/User/LoginUser

身体是

{"EmailAddress":"xx@xx.com","Password":"123456789"}

Fiddler点击链接很好,但有效负载总是为空。

我也试过

[HttpPost("LoginUser")]
public IActionResult LoginUser([FromBody] LoginUser loginUser)
{
    return Ok(loginUser);
}

在这种情况下,它没有击中该功能。

这是LoginUser定义:

public class LoginUser
{
    public string EmailAddress { get; set; }
    public string Password { get; set; }
}

任何想法?

4 个答案:

答案 0 :(得分:2)

你的行动应该是:

[Route("api/[controller]")]
public class UserController : Controller
{
    [HttpPost("LoginUser")]
    public IActionResult LoginUser([FromBody] LoginUser loginUser)
    {
        return Ok(loginUser);
    }
}

请参阅,[HttpPost("LoginUser")]仅影响路由,并且与LoginUser对象类型无关。

更新:您需要[FromBody],因为ASP.NET核心model binding默认情况下会查找[FromForm]绑定源。 [FromBody]属性表示您要将参数绑定到请求正文中的数据。

更新2:您还应该添加Content-Type: application/json标头来请求。 ASP.NET Core根据此标题选择输入格式化程序。

更新3:如果您确实需要将正文数据作为原始字符串,请查看ASP.NET Core MVC : How to get raw JSON bound to a string without a type?。它建议使用[FromBody] dynamic data

答案 1 :(得分:0)

JSON解析区分大小写。你的JSON是错误的。 应该是:{" EmailAddress":" xx@xx.com","密码":" 123456789"}。

答案 2 :(得分:0)

问题已经解决。当我添加我的UserController时,我这样做了一个类并从控制器派生。我删除了它并将其添加为新项目并选择了web api核心控制器。现在一切正常。谢谢你的帮助。

答案 3 :(得分:0)

  • 如果您的请求模型中的属性设置为{get; private set;},则不会填充这些值。通过删除private将其公开。也是构造函数 没用。

  • 如果您正在阅读正文中的纯文字,请查看是否[FromForm] 作品。