десериализовать объект при вызове ajax веб-службы asmx - PullRequest
0 голосов
/ 21 января 2019

У меня есть вызов AJAX, где звоните веб-сервис. веб-сервис должен возвращать значение (токен в виде строки). Я попробовал свой веб-сервис и попытался вызвать его вручную, он успешно извлек токен в виде строки. но когда я объединяю с вызовом AJAX, он возвращает объект. Как я могу получить значение токена?

вот мой фрагмент AJAX

$.ajax({
    url: "http://10.23.64.43:8035/iFrameIntegration.asmx/getToken",
    data: JSON.stringify({ Token: { userName: 'crm' } }),
    contentType: "application/json; charset=utf-8",
    type: 'POST',
    success: function (data) {
        alert(data);
    },
    error: function (data) {
        alert("Error");
    }
});

и вот мой веб-сервис (ASMX)

[WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public string getToken()
    {
        var request = (HttpWebRequest)WebRequest.Create("http://10.23.64.37:8080/ACCMWS/member/SSOInit");
        request.Method = "POST";
        request.ContentType = "application/json";
        request.Headers["userId"] = "Svc_CRM";
        request.Headers["loginType"] = "Internal";
        request.Headers["token"] = "54a93982adf51adfb81885ddbbb1874e271605ce";

        string result = string.Empty;
        try
        {
            using (var streamWriter = new StreamWriter(request.GetRequestStream()))
            {
                string json = "{ \"userName\": \"crm\"}";
                streamWriter.Write(json);
                streamWriter.Flush();
                streamWriter.Close();
            }
            try
            {
                using (var response = request.GetResponse() as HttpWebResponse)
                {
                    if (request.HaveResponse && response != null)
                    {
                        using (var reader = new StreamReader(response.GetResponseStream()))
                        {
                            var resultTokenAwal = reader.ReadToEnd();
                            var resultToken = JsonConvert.DeserializeObject<RetrieveSSOTokenResult>(resultTokenAwal);
                            result = resultToken.data.ssotokenList[0].ssoToken;
                        }
                    }
                }
            }
            catch (WebException e)
            {
                if (e.Response != null)
                {
                    using (var errorResponse = (HttpWebResponse)e.Response)
                    {
                        using (var reader = new StreamReader(errorResponse.GetResponseStream()))
                        {
                            string error = reader.ReadToEnd();
                            result = error;
                        }
                    }

                }
            }
        }
        catch(Exception ex)
        {
            ex.Message.ToString();
        }
        return result;
    }

и вот мой класс из моего веб-сервиса

public class RetrieveSSOTokenResult
{
    public string status { get; set; }
    public string message { get; set; }
    public Data data { get; set; }
}

public class Data
{
    public Ssotokenlist[] ssotokenList { get; set; }
}

public class Ssotokenlist
{
    public string loginType { get; set; }
    public string userName { get; set; }
    public string userId { get; set; }
    public string ssoToken { get; set; }
    public long expiryTime { get; set; }
}

вот результат, который я получаю при вызове из AJAX

{"d":"f0d7ef7e29b89d42e84d6590b8e7b52f899f3b7a"}

пожалуйста, сообщите, я только хочу предупредить значение токена, который является f0d7ef7e29b89d42e84d6590b8e7b52f899f3b7a.

в asmx, когда я пытаюсь вызвать, я получил только эту информацию

var from resultTokenAwal это

{"d":"status":"success","message":"","data":{"ssotokenList":[{"loginType":"Internal","userName":"CRM","userId":"E512E6D2-1584-4597-BBD6-01C724496107","ssoToken":"2f3b28def21bdace7bd7baacd0cd0bf72fbcb30b","expiryTime":1548047778532}]}}

но, в моем asmx, результат resultTokenAwal это

{"status":"success","message":"","data":{"ssotokenList":[{"loginType":"Internal","userName":"CRM","userId":"E512E6D2-1584-4597-BBD6-01C724496107","ssoToken":"2f3b28def21bdace7bd7baacd0cd0bf72fbcb30b","expiryTime":1548047778532}]}}

UPDATE: данные на самом деле уже разбираются в JSON в AJAX. так что, просто позвоните д. Вот обновление AJAX.

$.ajax({
    url: "http://10.23.64.43:8035/iFrameIntegration.asmx/getToken",
    data: JSON.stringify({ Token: { userName: 'crm' } }),
    contentType: "application/json; charset=utf-8",
    type: 'POST',
    success: function (data) {
        alert(data.d);
    },
    error: function (data) {
        alert("Error");
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...