我想将json对象传递给[WebMethod]。
我的[WebMethod]看起来像这样;
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public void UpdateBooksOrder(Success succ)
{
try
{
if (succ != null)
{
updateDal.LogSGDetails(succ);
}
}
catch (Exception ex)
{
logger.Error("exception ", ex);
}
}
而且,我将[WebMethod] URL设为;
http://localhost:50596/OrderStatusUpdate.asmx?op=UpdateBooksOrder
为了测试,我使用像这样的html + ajax将json对象传递到[WebMethod]上面;
<script type="text/javascript">
$("#btnUpdate").live("click", function () {
//alert("OK");
var succ = {};
succ.id = "1";
succ.refrerence = "148997";
succ.external_ref = "GF0000148997";
succ.status = "1";
succ.status_name = "test";
$.ajax({
type: 'POST',
url: 'http://localhost:50596/OrderStatusUpdate.asmx?op=UpdateBooksOrder',
data: "{succ:" + JSON.stringify(succ) + "}",
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function () {
alert("OK");
}
});
});
</script>
当我运行WebService项目并通过html调用它时,我得到以下错误;
Status Code:405 Method Not Allowed
请指导我解决这个问题。
答案 0 :(得分:1)
[WebMethod]属性通常用于较旧的xml Web服务。
这是什么类型的项目?如果这是一个较新的项目,请考虑使用像[HttpPost]这样的新结构。你能否提出进一步调查的要求(使用小提琴手)?
答案 1 :(得分:1)
我是以下面的方式做到的。它工作正常。 网络服务
[WebMethod]
public string OrderstatusUpdate(OrderStatus orderStatus)
{
//do what ever
return "Success";
}
OrderStatus Class
[Serializable]
public class OrderStatus
{
public int Id { get; set; }
public string Reference { get; set; }
}
Java脚本
function resolveObject(data) {
if (!data.hasOwnProperty('d')) return data;
else return data.d;
}
$.ajaxSetup({ "contentType": "application/json;charset=utf-8", "dataType": "json", "error": function (e) { console.log(e); return; } });
function saveOrder() {
var a = { orderStatus: {} };
a.orderStatus.Id = 1;
a.orderStatus.Reference = "reference";
$.ajax({
type: "POST",
url: "../services/OrderService.asmx/OrderstatusUpdate",
data: JSON.stringify(a),
success: function (r) {
alert(resolveObject(r));
}
});
}
并确保在Web服务类
之前取消注释以下行[System.Web.Script.Services.ScriptService]