我无法在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”,但结果是一样的。
答案 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/,其中包含大量有关常见错误的信息。