获取 HTTP 错误 400.0 - 来自 ASP .NET 4.6.1 的错误请求,即使在使用 JSON.stringify 时也是如此
Getting HTTP Error 400.0 - Bad Request from ASP .NET 4.6.1 even while using JSON.stringify
这是每个部分。我已经阅读了所有关于使用 JSON.stringify()
的问题,但 none 对我有用。我也尝试过 not 使用 JSON.stringify()
和 contentType: 'application/json'
,但我得到了相同的 400 错误。
如果我保持 JavaScript AJAX 相同,它在第一个示例中有效,参数在 SendEmailAPI
操作中列出,但它 当我尝试让它映射到视图模型时, 不起作用。
ASP 4.61 MVC 控制器,适用于列出的每个参数。
public class HomeController : Place.Web.Mvc.BaseController
{
...
[HttpPost]
public ActionResult SendEmailAPI(string FormType, string FirstName, string LastName, string GLobalOrCampusId)
{
if (ModelState.IsValid)
{
...
ASP 4.61 不 使用视图模型的 MVC 控制器。
public class HomeController : Place.Web.Mvc.BaseController
{
...
[HttpPost]
public ActionResult SendEmailAPI(FormViewModel model)
{
if (ModelState.IsValid)
{
...
jQuery AJAX
$.ajax({
url: '/Home/SendEmailAPI',
dataType: 'json',
method: 'POST',
contentType: 'application/json',
data: JSON.stringify({
'FirstName': self.firstName(),
'LastName': self.lastName(),
'GlobalOrCampusId': self.globalOrCampusId(),
'FormType': self.formType()
}),
success: function (data) {
console.log('Success:', data);
},
error: function (data) {
$('#tempErrorSpot').append(data.responseText)
console.warn('Error:', data);
}
})
视图模型
namespace Place.Request.ViewModels
{
public class FormViewModel : Place.Web.Mvc.BaseViewModel
{
[Display(Name = "Type of Form")]
[Required]
public string FormType { get; set; }
[Required]
[StringLength(50)]
[Display(Name = "First Name")]
public string FirstName { get; set; }
[Display(Name = "Last Name")]
[StringLength(50)]
[Required]
public string LastName { get; set; }
[Required]
[Display(Name = "Global ID or Campus ID")]
public string GlobalOrCampusId { get; set; }
[Required]
public string Department { get; set; }
public string ResponseMessage { get; internal set; }
}
}
当时的情况是,在使用字符串参数尝试它并让它工作之后,我仔细观察了 if (ModelState.IsValid)
。
在服务器上调试,ModelState.Values.5.Errors.0.ErrorMessage显示"The Department field is required." 问题揭晓!
原来我在 FormViewModel 上有 [Required]
字段尚未填充(我只是没有在 UI 然而)。稍后在 ModelState.IsValid
else
语句的逻辑分支中返回通用 HttpStatusCodeResult(HttpStatusCode.BadRequest)
。
这是每个部分。我已经阅读了所有关于使用 JSON.stringify()
的问题,但 none 对我有用。我也尝试过 not 使用 JSON.stringify()
和 contentType: 'application/json'
,但我得到了相同的 400 错误。
如果我保持 JavaScript AJAX 相同,它在第一个示例中有效,参数在 SendEmailAPI
操作中列出,但它 当我尝试让它映射到视图模型时, 不起作用。
ASP 4.61 MVC 控制器,适用于列出的每个参数。
public class HomeController : Place.Web.Mvc.BaseController
{
...
[HttpPost]
public ActionResult SendEmailAPI(string FormType, string FirstName, string LastName, string GLobalOrCampusId)
{
if (ModelState.IsValid)
{
...
ASP 4.61 不 使用视图模型的 MVC 控制器。
public class HomeController : Place.Web.Mvc.BaseController
{
...
[HttpPost]
public ActionResult SendEmailAPI(FormViewModel model)
{
if (ModelState.IsValid)
{
...
jQuery AJAX
$.ajax({
url: '/Home/SendEmailAPI',
dataType: 'json',
method: 'POST',
contentType: 'application/json',
data: JSON.stringify({
'FirstName': self.firstName(),
'LastName': self.lastName(),
'GlobalOrCampusId': self.globalOrCampusId(),
'FormType': self.formType()
}),
success: function (data) {
console.log('Success:', data);
},
error: function (data) {
$('#tempErrorSpot').append(data.responseText)
console.warn('Error:', data);
}
})
视图模型
namespace Place.Request.ViewModels
{
public class FormViewModel : Place.Web.Mvc.BaseViewModel
{
[Display(Name = "Type of Form")]
[Required]
public string FormType { get; set; }
[Required]
[StringLength(50)]
[Display(Name = "First Name")]
public string FirstName { get; set; }
[Display(Name = "Last Name")]
[StringLength(50)]
[Required]
public string LastName { get; set; }
[Required]
[Display(Name = "Global ID or Campus ID")]
public string GlobalOrCampusId { get; set; }
[Required]
public string Department { get; set; }
public string ResponseMessage { get; internal set; }
}
}
当时的情况是,在使用字符串参数尝试它并让它工作之后,我仔细观察了 if (ModelState.IsValid)
。
在服务器上调试,ModelState.Values.5.Errors.0.ErrorMessage显示"The Department field is required." 问题揭晓!
原来我在 FormViewModel 上有 [Required]
字段尚未填充(我只是没有在 UI 然而)。稍后在 ModelState.IsValid
else
语句的逻辑分支中返回通用 HttpStatusCodeResult(HttpStatusCode.BadRequest)
。