获取 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)