我正在使用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; }
}
任何想法?
答案 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]
作品。