json POST 上使用 AJAX 的 MVC 操作方法的字符串为空
json string on POST to MVC action method using AJAX is null
我很难找出为什么通过 AJAX 请求发送的字符串为空。 Console.WriteLine(data) 显示为空。状态为 200 正常。如果我添加一些代码来解析收到的字符串,我会收到一条错误消息,指出 JObject.Parse 不能为空。我不知道我错过了什么。 javascript 代码没问题。 action方法貌似还可以,但是我对Asp.Net Core和MVC的了解非常匮乏,所以不太确定。有人可以指出我遗漏了什么吗?
javascript代码:
let obj = {email: email_address.value};
let objStringified = JSON.stringify(obj);
$.ajax({
type: 'POST',
contentType: 'application/json; charset=UTF-8',
data: objStringified,
url: '@Url.Action("ReturnCheckAccountDuplication")',
dataType: 'text',
success: function(data) {
console.log(data);
},
error: function(error) {
console.log("Keep trying", error);
}
});
C#代码:
[HttpPost]
public ActionResult ReturnCheckAccountDuplication([FromBody] string data)
{
Console.WriteLine(data);
JObject jObject = JObject.Parse(data);
string email = (string)jObject["email"];
bool emailExists = CheckAccountDuplication.Get(email);
string returnResult = emailExists.ToString();
return Content(returnResult);
}
控制器端的解决方案是
public class AccountCheckModel
{
public string Email { get; set; }
}
[HttpPost]
public ActionResult ReturnCheckAccountDuplication([FromBody] AccountCheckModel data)
{
string result = CheckAccountDuplication.Get(data.Email).ToString();
return Content(result);
}
感谢所有评论我的问题的成员,特别是提供解决方案的 John Glenn。我已经尝试了几天但没有成功。我对 Asp.Net Core 的了解确实很差。非常感谢。
最简单的解决方案是创建一个模型来表示您的控制器将接收的 JSON 数据。例如,像这样创建一个 class:
public class AccountCheckModel
{
public string email { get; set }
}
然后,将其用作控制器方法的参数:
public ActionResult ReturnCheckAccountDuplication([FromBody] AccountCheckModel data)
这是访问请求正文的首选方式。要将请求正文作为字符串获取,您必须跳过一些 serious hoops.
通过 AJAX
将数据发送到 Controller
的另一种方法:
var json = {
email: email_address.value
};
$.ajax({
type: 'POST',
data: {'json': JSON.stringify(json)},
url: '@Url.Action("ReturnCheckAccountDuplication")',
dataType: 'json',
success: function(data) {
console.log(data);
},
error: function(error) {
console.log("Keep trying", error);
}
});
还有你的Controller
:
[HttpPost]
public ActionResult ReturnCheckAccountDuplication(string json)
{
Console.WriteLine(json);
JObject jObject = JObject.Parse(json);
string email = (string)jObject["email"];
bool emailExists = CheckAccountDuplication.Get(email);
string returnResult = emailExists.ToString();
return Content(returnResult);
}
我很难找出为什么通过 AJAX 请求发送的字符串为空。 Console.WriteLine(data) 显示为空。状态为 200 正常。如果我添加一些代码来解析收到的字符串,我会收到一条错误消息,指出 JObject.Parse 不能为空。我不知道我错过了什么。 javascript 代码没问题。 action方法貌似还可以,但是我对Asp.Net Core和MVC的了解非常匮乏,所以不太确定。有人可以指出我遗漏了什么吗?
javascript代码:
let obj = {email: email_address.value};
let objStringified = JSON.stringify(obj);
$.ajax({
type: 'POST',
contentType: 'application/json; charset=UTF-8',
data: objStringified,
url: '@Url.Action("ReturnCheckAccountDuplication")',
dataType: 'text',
success: function(data) {
console.log(data);
},
error: function(error) {
console.log("Keep trying", error);
}
});
C#代码:
[HttpPost]
public ActionResult ReturnCheckAccountDuplication([FromBody] string data)
{
Console.WriteLine(data);
JObject jObject = JObject.Parse(data);
string email = (string)jObject["email"];
bool emailExists = CheckAccountDuplication.Get(email);
string returnResult = emailExists.ToString();
return Content(returnResult);
}
控制器端的解决方案是
public class AccountCheckModel
{
public string Email { get; set; }
}
[HttpPost]
public ActionResult ReturnCheckAccountDuplication([FromBody] AccountCheckModel data)
{
string result = CheckAccountDuplication.Get(data.Email).ToString();
return Content(result);
}
感谢所有评论我的问题的成员,特别是提供解决方案的 John Glenn。我已经尝试了几天但没有成功。我对 Asp.Net Core 的了解确实很差。非常感谢。
最简单的解决方案是创建一个模型来表示您的控制器将接收的 JSON 数据。例如,像这样创建一个 class:
public class AccountCheckModel
{
public string email { get; set }
}
然后,将其用作控制器方法的参数:
public ActionResult ReturnCheckAccountDuplication([FromBody] AccountCheckModel data)
这是访问请求正文的首选方式。要将请求正文作为字符串获取,您必须跳过一些 serious hoops.
通过 AJAX
将数据发送到 Controller
的另一种方法:
var json = {
email: email_address.value
};
$.ajax({
type: 'POST',
data: {'json': JSON.stringify(json)},
url: '@Url.Action("ReturnCheckAccountDuplication")',
dataType: 'json',
success: function(data) {
console.log(data);
},
error: function(error) {
console.log("Keep trying", error);
}
});
还有你的Controller
:
[HttpPost]
public ActionResult ReturnCheckAccountDuplication(string json)
{
Console.WriteLine(json);
JObject jObject = JObject.Parse(json);
string email = (string)jObject["email"];
bool emailExists = CheckAccountDuplication.Get(email);
string returnResult = emailExists.ToString();
return Content(returnResult);
}