通过jQuery / AJAX PUT请求发送的数据在控制器中检索为null

时间:2014-10-20 13:58:23

标签: jquery asp.net ajax

我的AJAX api函数有问题:

var baseURL = "http://localhost:8208/api/";

function updateMultipleQuestions(questionsPrototype, callback) {
    var url = baseURL + "Questions?isMultiple=true";

    $.ajax({
        url: url,
        type: 'PUT',
        data: questionsPrototype,
        dataType: 'json',
        contentType: 'application/json',
        statuscode: {
            200: function (output) {
                callback(output);
            },
            201: function (output) {
                callback(output);
            }
        }
    });
}

questionsPrototype是MultiQuestion类型的一个对象,它是一个问题数组:

function Question()
{
    this.ID = 0;
    this.Index = 0;
    this.ImageURL = "imgurl_?";
    this.Title = "";
    this.QuestionText = "";
    this.SectionID = 0;
    this.CommentLength = 0;
    this.Required = false;
    this.NumberOfAllowedAnswers = 0;
    this.NumberOfAllowedCharacters = 63;
    this.OptionChoices = [];
    this.QuestionType = 0;
}

function MultiQuestions()
{
    this.Questions = [];
}

该数据应该发送给控制器:

// PUT: api/Questions?isMultiple=true
[ResponseType(typeof(MultiQuestionActivityModel))]
public IHttpActionResult PutQuestion([FromUri] bool isMultiple, MultiQuestionActivityModel Questions)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    using (var uow = new UnitOfWorkFactory().Create())
    {
        var QuestionActivity = new QuestionActivity(uow);
        if (QuestionActivity.MultiQuestionSave(Questions) > 0)
        {
            return Ok(Questions);
        }
        else
        {
            // Handle this
            return ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Could not save questions")); ;
        }
    }
}

现在的问题是,当我调用api函数updateMultipleQuestions时,正确的数据被发送到函数中,但是从ajax调用到控制器,数据变为null(MultiQuestionActivityModel Questions)(在调试模式下检查)。

我已经使用相同的数据测试了Postman中的url并且调用正常,这使得我认为问题出在AJAX调用中,可能其中一个标头参数可能使用错误了?

我对此很新,可能忽略了一些东西。 先谢谢 / Janmumrik

1 个答案:

答案 0 :(得分:2)

在您的Ajax调用中,您说您发送的数据类型是json,但是您没有发送json。也许您可以尝试在数据中使用JSON.stringify()