jQuery / json从.NET Web服务中的POST读取参数

时间:2011-01-14 14:55:15

标签: jquery web-services json parameters

我无法弄清楚如何从来自jQuery的POST中读取json字符串(我见过的大多数文章都展示了如何发送json,但不知道如何从Web收到的POST消息中获取它服务。

这是我到目前为止编写的代码。

在客户端:

<input type="text" id="UserNameText" />
<br />
<input type="password" id="PasswordText" />
<br />
<input type="button" id="Login" value="Login" onclick="DoLogin();" />

<script type="text/javascript" language="javascript">
    function DoLogin() 
    {
        var un = document.getElementById('UserNameText').value;
        var pw = document.getElementById('PasswordText').value;
        var info = "{ 'UserName':'" + un + "', 'Password':'" + pw + "'}";

        $.ajax(
        {
            type: "POST",
            url: "http://localhost:60876/Login.asmx/LoginSpecial",
            dataType: 'json',
            data: info,
            contentType: "application/json; charset=utf-8",
            success: function (msg) { alert(msg.d); },
            error: function (msg) { alert(msg.responseText); }
        });
    }
</script>

在服务器端我得到了这个:

[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
[WebMethod]
public string LoginSpecial()
{
    // none of these seem to be working
    NameValueCollection parameters = HttpContext.Current.Request.Params;
    string p = parameters["QUERY_STRING"] != null ? parameters["QUERY_STRING"].ToString() : String.Empty;
    string info = HttpContext.Current.Request["info"] != null ? HttpContext.Current.Request["info"].ToString() : String.Empty;
    string data = HttpContext.Current.Request["data"] != null ? HttpContext.Current.Request["data"].ToString() : String.Empty;

    // test json string, need to read from the jquery post
    string json = "{ 'UserName':'test', 'Password':'test'}";

    // the following two lines of code work ok with the test json string above.
    JavaScriptSerializer serial = new JavaScriptSerializer();
    Credentials credential = (Credentials)serial.Deserialize(json, typeof(Credentials));

    return "Some json message here";
}

我已经设置了断点,我按照预期点击了Web服务,我只是无法弄清楚如何从POST消息中获取json字符串。

3 个答案:

答案 0 :(得分:4)

如果您希望Web服务方法使用提交的JSON对象,则必须将方法签名更改为:

[WebMethod]
LoginSpecial(string Username, string Password)
{
}

您提供给AJAX调用的data属性的JSON对象必须具有与Web服务方法签名的参数名称匹配的属性名称。

如果要提交参数列表,则必须提交一个对象数组,并在Web服务中创建一个包装器.NET对象,如下所述:

Using jQuery to POST Form Data to an ASP.NET ASMX AJAX Web Service

希望有所帮助。

答案 1 :(得分:2)

在服务器端使用库:

Newtonsoft.Json.Linq =&gt;从http://james.networking.com/projects/json-net.aspx

下载了JSON.net

代码:

        System.IO.StreamReader sr = new System.IO.StreamReader(Request.InputStream);

        string line = "";

        line = sr.ReadToEnd();

        JObject jo = JObject.Parse(line);

        string something = (string)jo["something"]

答案 2 :(得分:0)

将参数添加到方法

[WebMethod]
LoginSpecial(string something)
{
}