将json发布到WebService

时间:2015-12-09 18:52:44

标签: c# json ajax web-services

我想将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

请指导我解决这个问题。

2 个答案:

答案 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]