HTTP Post请求正文值为null c#



我正在设置一个带有.NET Core后端的react应用程序。我正在使用fetch向后端c#用户控制器登录方法发送一个HTTP post请求,其中包含用户名值和密码值。http请求如下:

function login(username, password) {
const requestOptions = {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ username, password })
};
return fetch(`/user/login`, requestOptions)
.then(handleResponse)
.then(user => {
// store user details and jwt token in local storage to keep user logged in between page refreshes
localStorage.setItem('user', JSON.stringify(user));
return user;
});
}

我可以在谷歌开发工具中看到,请求是从上面的代码中发送的,并且包含用户名和密码。我在下面的代码的第一行放置了一个断点,可以看到用户名和密码没有在c#登录方法端填充,因为它们都是null。

对于HttpContext.Request,我已经尝试了3种不同的方法。形式它抛出null错误。我尝试使用[FromBody]标签解析方法中的参数,并获得null。我也尝试使用流读取器,但它返回一个空字符串。

[HttpPost]
public JsonResult Login([FromBody] string username, [FromBody] string password) // both are null
{
System.Diagnostics.Debug.WriteLine("The form has " + username.ToString());

// throws null error
//string bodyValues = HttpContext.Request.Form["username"];

Stream req = Request.Body;
//req.Position = 0;
string json = new StreamReader(req).ReadToEndAsync().Result;
string input = null;
try
{
input = JsonConvert.DeserializeObject<string>(json);
}
catch (Exception ex)
{
// Try and handle malformed POST body
return new  JsonResult("false");
}
return new JsonResult("true");
}

感谢您的帮助!

修复您的javascript

function login(username, password) {
const requestOptions = {
method: 'POST',
body: { username : username, password: password }
};
......

并尝试删除[FromBody],因为你不能使用它两次

[HttpPost]
public JsonResult Login( string username, string password)

如果您仍然有一些问题,请尝试创建视图模型

public class PasViewModel
{
public string Username { get; set; }
public string Password { get; set; }
}

并将FromBody添加到动作视图模型

[HttpPost]
public JsonResult Login( [FromBody] PasViewModel viewModel)

相关内容

最新更新