【问题标题】:Posting json to WebService将 json 发布到 WebService
【发布时间】:2015-12-09 18:52:44
【问题描述】:

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

请指导我解决问题的方法。

【问题讨论】:

    标签: c# json ajax web-services


    【解决方案1】:

    我通过以下方式做到了这一点。它工作正常。 网络服务

       [WebMethod]
        public string OrderstatusUpdate(OrderStatus orderStatus)
        {
           //do what ever
            return "Success";
        }
    

    OrderStatus 类

    [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]
    

    【讨论】:

      【解决方案2】:

      [WebMethod] 属性通常用于较旧的 xml Web 服务。

      这是什么类型的项目?如果这是一个较新的项目,请考虑使用较新的结构,例如 [HttpPost]。您可以发布请求以进行进一步调查(使用提琴手)吗?

      【讨论】:

      • 是的,这是一个使用 .Net 3.5 Fiddler 的旧应用程序,我从未使用过它。我刚刚安装,我应该查看哪个部分?完成了您分享的其他帖子中的所有事情,但没有任何解决方案。
      • 在提琴手中查看检查器并为请求选择“原始” - 然后将其发布在这里:-)
      • OPTIONS localhost:50596/OrderStatusUpdate.asmx?op=UpdateBooksOrder HTTP/1.1 主机:localhost:50596 连接:keep-alive 访问控制请求方法:POST 来源:null 用户代理:Mozilla/5.0 (Windows NT 6.1; WOW64 ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 Access-Control-Request-Headers: accept, content-type Accept: / Accept-Encoding: gzip, deflate, sdch接受语言:en-GB,en-US;q=0.8,en;q=0.6
      猜你喜欢
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 2016-10-01
      • 1970-01-01
      • 2011-07-03
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      相关资源
      最近更新 更多