0

我无法在 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",但结果是一样的。

4

1 回答 1

1

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

为什么你会收到错误。如果data在发送 AJAX 请求时将 JSON 数组放入属性中,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 字符串,则可以使用JSON2JSON.stringify()中的内容。

如果您想阅读更多内容,请查看http://encosia.com/3-mistakes-to-avoid-when-using-jquery-with-aspnet-ajax/其中有很多关于一些常见问题的信息错误是。

于 2013-03-24T22:01:01.127 回答