jQuery / json читает параметры из POST в веб-сервисе .NET - PullRequest
3 голосов
/ 14 января 2011

У меня возникают проблемы с выяснением, как читать строку json из POST, поступающего из jQuery (в большинстве статей, которые я видел, показано, как отправить json, а не как получить его из сообщения 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";
}

Я установил точки останова и запускаю веб-сервис, как и ожидалось, я просто не могу понять, как получить строку json из сообщения POST.

Ответы [ 3 ]

4 голосов
/ 22 марта 2011

Если вы хотите, чтобы ваш метод веб-службы работал с переданным объектом JSON, вам придется изменить сигнатуру метода на:

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

Объект JSON, который вы передаете свойству data свойствавызов AJAX должен иметь имена свойств, совпадающие с именами параметров вашей сигнатуры метода веб-службы.

Если вы хотите отправить список параметров, вы должны передать массив объектов и создать объект-оболочку .NETв вашем веб-сервисе, как описано здесь:

Использование jQuery для отправки данных формы в виде веб-службы ASP.NET ASMX AJAX

Надеюсь, что это поможет.

2 голосов
/ 17 апреля 2011

На стороне сервера используйте библиотеку:

Newtonsoft.Json.Linq => скачал JSON.net с http://james.networking.com/projects/json-net.aspx

И код:

        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"]
0 голосов
/ 14 января 2011

Добавьте параметр в ваш метод,

[WebMethod]
LoginSpecial(string something)
{
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...