jQuery AJAX 发布到 MVC 控制器对象——请求显示为空
Posted
技术标签:
【中文标题】jQuery AJAX 发布到 MVC 控制器对象——请求显示为空【英文标题】:jQuery AJAX post to MVC Controller object -- request shows up null 【发布时间】:2018-11-18 15:52:41 【问题描述】:我知道我在这里遗漏了一些细节。
问题
尽管谷歌搜索、尝试示例、不同格式等,我发送的 AJAX 请求始终被验证为所有字段为空,但不为空。
我认为我没有以正确的格式发送内容,以便控制器将其识别为对象,但我不确定是什么。
提琴手:我的请求是什么样子的
使用一些虚拟数据:
代码:模型类
public class ContactUsMessage
public string Email get; set;
public string Name get; set;
public string PhoneNumber get; set;
public string Message get; set;
代码:WebAPI 控制器
[HttpPost]
public HttpResponseMessage NewMessage(ContactUsMessage messageToSend)
if (messageToSend == null)
var sadResponse = Request.CreateResponse(HttpStatusCode.BadRequest, "Empty Request");
return sadResponse;
var messageValidator = new ContactUsMessageValidator();
var results = messageValidator.Validate(messageToSend);
var failures = results.Errors;
var sadString = "";
if (!results.IsValid)
foreach (var error in failures)
sadString += " Problem: " + error.ErrorMessage;
var sadResponse = Request.CreateResponse(HttpStatusCode.NotAcceptable, "Model is invalid." + sadString);
return sadResponse;
else
SendContactFormEmail(messageToSend.Email, messageToSend.Name, messageToSend.PhoneNumber, messageToSend.Message);
代码:页面上的 javascript
function sendSubmissionForm()
var dataObject = JSON.stringify(
messageToSend:
'Email': $('#inpEmail').val(),
'Name': $('#inpName').val(),
'PhoneNumber': $('#inpPhone').val(),
'Message': $('#inpMessage').val()
);
$.ajax(
url: '/api/contactus/newmessage',
type: 'POST',
done: submissionSucceeded,
fail: submissionFailed,
data: dataObject
);
【问题讨论】:
【参考方案1】:当您 JSON.stringifyied 您的数据对象时,您将其转换为 JSON。但是您忘记设置 Content-Type 请求标头,Web API 无法知道您发送的是 JSON、XML 还是其他内容:
$.ajax(
url: '/api/contactus/newmessage',
type: 'POST',
contentType: 'application/json',
done: submissionSucceeded,
fail: submissionFailed,
data: dataObject
);
此外,在构建 JSON 时,您不需要将其包装在与您的方法参数名称匹配的附加属性中。以下内容也应该有效:
var dataObject = JSON.stringify(
'Email': $('#inpEmail').val(),
'Name': $('#inpName').val(),
'PhoneNumber': $('#inpPhone').val(),
'Message': $('#inpMessage').val()
);
【讨论】:
谢谢!我知道这是我所缺少的基本东西。感谢您迅速而清晰的回复! @Darin Dimitrov 我欠你一个啤酒哥们。你是我的救命稻草以上是关于jQuery AJAX 发布到 MVC 控制器对象——请求显示为空的主要内容,如果未能解决你的问题,请参考以下文章
使用 jQuery Ajax 将单个对象传递给 MVC 控制器方法
通过 jQuery.Ajax 向 MVC 控制器发送多个项目
使用 jQuery Ajax 将对象列表传递给 MVC 控制器方法
JQUERY ajax 将 JSON 发布到 C# MVC 控制器,但传入的数据为空