StringContent 导致空值,但 FormUrlEncodedContent 工作正常
StringContent results in null value but FormUrlEncodedContent works correctly
我在 ASP.NET Core 2.0 Web API
中有以下模型
public class LoginModel
{
public string Username { get; set; }
public string Password { get; set; }
}
其中包含以下操作
[HttpPost]
public async Task<IActionResult> Login(LoginModel model)
{
if (ModelState.IsValid)
{
var result = await SignInManager.PasswordSignInAsync(model.Username, model.Password, false, false);
if (result.Succeeded)
{
ApplicationUser user = await UserManager.FindByNameAsync(model.Username);
return new ObjectResult(await GenerateToken(user));
}
}
return BadRequest(model);
}
在测试客户端中将 StringContent 与 JsonConvert 结合使用时,这会导致 NULL 值在发布到控制器上的操作时显示在模型中。
var credentials = new LoginModel() { Username = "me@me.com", Password = "somePassword" };
var content = new StringContent(JsonConvert.SerializeObject(credentials), Encoding.UTF8, "application/json");
var response = await client.PostAsync("/api/auth/login", content);
使用 FormUrlEncodedContent 时,模型会在控制器的操作中正确填充。
var content = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("username", "me@me.com"),
new KeyValuePair<string, string>("password", "somePassword"),
}
var response = await client.PostAsync("/api/auth/login", content);
我也尝试过使用 HttpClient 扩展,这也会导致发布时模型中不显示任何值。
var credentials = new LoginModel() { Username = "me@me.com", Password = "somePassword" };
var response = await client.PostAsJsonAsync<LoginModel>("/api/auth/login", credentials);
我错过了什么?任何帮助将不胜感激。
更新操作以使用 [FromBody]
属性
查找请求正文中的内容
[HttpPost]
public async Task<IActionResult> Login([FromBody]LoginModel model) {
//...code removed for brevity
}
我在 ASP.NET Core 2.0 Web API
中有以下模型public class LoginModel
{
public string Username { get; set; }
public string Password { get; set; }
}
其中包含以下操作
[HttpPost]
public async Task<IActionResult> Login(LoginModel model)
{
if (ModelState.IsValid)
{
var result = await SignInManager.PasswordSignInAsync(model.Username, model.Password, false, false);
if (result.Succeeded)
{
ApplicationUser user = await UserManager.FindByNameAsync(model.Username);
return new ObjectResult(await GenerateToken(user));
}
}
return BadRequest(model);
}
在测试客户端中将 StringContent 与 JsonConvert 结合使用时,这会导致 NULL 值在发布到控制器上的操作时显示在模型中。
var credentials = new LoginModel() { Username = "me@me.com", Password = "somePassword" };
var content = new StringContent(JsonConvert.SerializeObject(credentials), Encoding.UTF8, "application/json");
var response = await client.PostAsync("/api/auth/login", content);
使用 FormUrlEncodedContent 时,模型会在控制器的操作中正确填充。
var content = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("username", "me@me.com"),
new KeyValuePair<string, string>("password", "somePassword"),
}
var response = await client.PostAsync("/api/auth/login", content);
我也尝试过使用 HttpClient 扩展,这也会导致发布时模型中不显示任何值。
var credentials = new LoginModel() { Username = "me@me.com", Password = "somePassword" };
var response = await client.PostAsJsonAsync<LoginModel>("/api/auth/login", credentials);
我错过了什么?任何帮助将不胜感激。
更新操作以使用 [FromBody]
属性
[HttpPost]
public async Task<IActionResult> Login([FromBody]LoginModel model) {
//...code removed for brevity
}