我可以像查询字符串一样传递web方法参数吗?

时间:2015-10-20 11:18:14

标签: c# jquery asp.net ajax

这里我使用的是web方法'InsertData'。我可以传递查询string["json.aspx/InsertData?username="+name+"......"]等参数,而不是传递给data吗?如果我使用像查询字符串那么有什么好处。

$.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8", 
        url: "json.aspx/InsertData",
        data: "{'username':'" + name + "','subj':'" + subject + "','desc':'" + body + "'}",
        dataType: "json",
        success: function(data) {
                 var obj = data.d;
                 if (obj == 'true') {
                       $('#txtname').val('');
                       $('#txtsubject').val('');
                       $('#txtbody').val('');
                       $('#lblmsg').html("Details Submitted Successfully");
                 }
        },
        error: function(result) {
                 alert("Error");
        }
});

1 个答案:

答案 0 :(得分:4)

我正在考虑两种不满:

  1. 如果使用查询字符串传递数据,则数据在浏览器URL中可见
  2. 根据网络服务器,URL有一些长度限制,因此如果您在URL中放入大量数据,服务器可能会拒绝您的请求。如果Request Limits超过URL的长度,IIS将返回404.14。
  3. 要将查询字符串传递给Webmethod,请执行以下操作:

    • 您必须使用查询字符串参数

    • 设置网址
    • 您必须在服务器端获取此参数,以便从Request对象获取它们。

    客户端

    var url = "json.aspx/InsertData?username=" + name + "&subj=" + subject + "&desc=" + body;
    
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8", 
        url: url,
        dataType: "json",
        success: function(data) {
                 var obj = data.d;
                 if (obj == 'true') {
                       $('#txtname').val('');
                       $('#txtsubject').val('');
                       $('#txtbody').val('');
                       $('#lblmsg').html("Details Submitted Successfully");
                 }
        },
        error: function(result) {
                 alert("Error");
        }
       });
    

    在服务器端,您必须检查Request对象:

        [WebMethod(EnableSession=true)]
        public static object InsertData()
        {
             var name = HttpContext.Current.Request.QueryString["username"];
             var subject = HttpContext.Current.Request.QueryString["subject"];
             var desc = HttpContext.Current.Request.QueryString["desc"];
    
             // Do some work
        }