是什么导致参数为空?
What's causing the parameter to be null?
我正在使用 Asp.Net Core 2.0 和网络 api 来构建休息服务。除 HTTPPost 外,一切正常。
[HttpPost("LoginUser")]
public IActionResult LoginUser(LoginUser loginUser)
{
return Ok(loginUser);
}
loginUser 始终为空。我正在用 fiddler 进行测试,我的路线是 http://localhost:53250/api/User/LoginUser
而 body 是
{"EmailAddress":"xx@xx.com","Password":"123456789"}
Fiddler 命中 link 就好了,但负载始终为空。
我也试过了
[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; }
}
有什么想法吗?
JSON 解析区分大小写。您的 JSON 大小写错误。
应该是:{"EmailAddress":"xx@xx.com","Password":"123456789"}.
您的操作应该是:
[Route("api/[controller]")]
public class UserController : Controller
{
[HttpPost("LoginUser")]
public IActionResult LoginUser([FromBody] LoginUser loginUser)
{
return Ok(loginUser);
}
}
看,[HttpPost("LoginUser")]
只影响路由,与 LoginUser
object 类型无关。
更新:您需要 [FromBody]
,因为 ASP.NET 核心 model binding 默认会查看 [FromForm]
绑定源。而[FromBody]
属性表示要给请求中的数据绑定一个参数body.
更新 2:您还应该在请求中添加 Content-Type: application/json
header。 ASP.NET 核心根据 this header.
选择输入格式化程序
更新 3:如果您确实需要将 body 数据作为原始字符串获取,请查看 ASP.NET Core MVC : How to get raw JSON bound to a string without a type?。它建议使用 [FromBody] dynamic data
问题已解决。当我添加我的 UserController 时,我这样做是作为一个 class 并派生自控制器。我删除了它并将其添加为新项目并选择了 web api 核心控制器。现在一切正常。感谢您的帮助。
如果您的请求模型中有设置为 {get;
private set;}
的属性,则不会填充这些值。通过删除 private
使它们成为 public。还有构造函数
没有被利用。
如果您正在阅读正文中的纯文本,请查看是否 [FromForm]
有效。
我正在使用 Asp.Net Core 2.0 和网络 api 来构建休息服务。除 HTTPPost 外,一切正常。
[HttpPost("LoginUser")]
public IActionResult LoginUser(LoginUser loginUser)
{
return Ok(loginUser);
}
loginUser 始终为空。我正在用 fiddler 进行测试,我的路线是 http://localhost:53250/api/User/LoginUser
而 body 是
{"EmailAddress":"xx@xx.com","Password":"123456789"}
Fiddler 命中 link 就好了,但负载始终为空。
我也试过了
[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; }
}
有什么想法吗?
JSON 解析区分大小写。您的 JSON 大小写错误。 应该是:{"EmailAddress":"xx@xx.com","Password":"123456789"}.
您的操作应该是:
[Route("api/[controller]")]
public class UserController : Controller
{
[HttpPost("LoginUser")]
public IActionResult LoginUser([FromBody] LoginUser loginUser)
{
return Ok(loginUser);
}
}
看,[HttpPost("LoginUser")]
只影响路由,与 LoginUser
object 类型无关。
更新:您需要 [FromBody]
,因为 ASP.NET 核心 model binding 默认会查看 [FromForm]
绑定源。而[FromBody]
属性表示要给请求中的数据绑定一个参数body.
更新 2:您还应该在请求中添加 Content-Type: application/json
header。 ASP.NET 核心根据 this header.
更新 3:如果您确实需要将 body 数据作为原始字符串获取,请查看 ASP.NET Core MVC : How to get raw JSON bound to a string without a type?。它建议使用 [FromBody] dynamic data
问题已解决。当我添加我的 UserController 时,我这样做是作为一个 class 并派生自控制器。我删除了它并将其添加为新项目并选择了 web api 核心控制器。现在一切正常。感谢您的帮助。
如果您的请求模型中有设置为
{get; private set;}
的属性,则不会填充这些值。通过删除private
使它们成为 public。还有构造函数 没有被利用。如果您正在阅读正文中的纯文本,请查看是否
[FromForm]
有效。