你如何让ASP.Net 3.5 WebService接受AJAX PUT请求?

时间:2013-03-24 19:57:51

标签: jquery ajax web-services asp.net-3.5 put

我无法在ASP.Net 3.5项目中获得WebService来接受PUT请求。

以下是AJAX调用:

var url = '/MyService.asmx/UpdateObject';
var options = {
    dataType: "json",
    contentType: "application/json",
    cache: false,
    type: "PUT",
    data: data ? ko.toJSON(data) : null
};

$.ajax(url, options);

在MyService.asmx中,我有以下内容:

[WebMethod(EnableSession = true)]
[System.Web.Script.Services.ScriptMethod(ResponseFormat = System.Web.Script.Services.ResponseFormat.Json, UseHttpGet=true)]
public ButDto UpdateObject(ObjectDto myObject)
{
    //Do some stuff here

    return myObject;
}    

但是,我收到以下错误消息:

  

尝试使用POST调用方法UpdateObject   请求,这是不允许的。

如果我从我的Web服务声明中删除“,UseHttpGet = true”并执行相同的ajax调用,则会收到以下错误消息:

  

尝试使用GET调用方法UpdateObject   请求,这是不允许的。

所以我在这里有点困惑。

更新

我也尝试过dataType:“text”,但结果是一样的。

1 个答案:

答案 0 :(得分:1)

查看MSDN,POST和GET是ScriptMethod唯一可接受的HTTP谓词。

为什么你会收到错误。如果在发送AJAX请求时将JSON数组放入data属性,jQuery会将其序列化为查询字符串并将其发送到服务器。但这不是ASP.NET正在寻找的东西。您需要传递jQuery一个您想要使用的JSON字符串。像:

var url = '/MyService.asmx/UpdateObject';
var options = {
    dataType: "json",
    contentType: "application/json; charset=utf-8",  // add charset for good measure
    cache: false,
    type: "POST",
    data: "{'id':2, 'name':'foobar'}"  // notice the quotes here
};

$.ajax(url, options);

如果您想将Javascript对象转换为完成请求所需的JSON字符串,则可以使用JSON2中的JSON.stringify()内容。

如果您想阅读更多内容,请查看http://encosia.com/3-mistakes-to-avoid-when-using-jquery-with-aspnet-ajax/,其中包含大量有关常见错误的信息。