是什么导致参数为空?

问题描述 投票:1回答:4

我正在使用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":"[email protected]","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; }
}

有任何想法吗?

asp.net-core http-post asp.net-core-webapi
4个回答
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


0
投票

JSON解析区分大小写。你的JSON是错误的。应为:{“EmailAddress”:“[email protected]”,“密码”:“123456789”}。


0
投票

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


0
投票
  • 如果您的请求模型中的属性设置为{get; private set;},则不会填充值。通过删除private将它们公之于众。也没有使用构造函数。
  • 如果您正在阅读正文中的纯文本,请查看[FromForm]是否有效。
© www.soinside.com 2019 - 2024. All rights reserved.