ASP. NET WebMethod получает JSON строку? - PullRequest
0 голосов
/ 30 апреля 2020

Я пытаюсь вызвать WebMethod через ajax со строкой JSON следующим образом:

                let jsonData = JSON.stringify({test: "Test"});

                $.ajax({
                    type: "POST",
                    url: "WebForm.aspx/DoStuff",
                    data: '{data: "' + jsonData + '" }',
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: OnSuccess,
                    failure: function (response) {
                        alert(response.d);
                    }
                });

Однако я получаю внутреннюю ошибку HTTP 500.

I хотел бы проанализировать строку JSON в WebMethod, так как я не знаю значений во время выполнения. WebMethod выглядит так:

        [WebMethod]
        public static string DoStuff(string data)
        {
            var keyValuePairs = JsonConvert.DeserializeObject<Dictionary<string, string>>(data);
            foreach (var key in keyValuePairs.Keys)
            {
                ...
            }

            return ...
        }

Ответы [ 2 ]

0 голосов
/ 30 апреля 2020

Хорошо, проблема была с форматированием данных в запросе ajax. Работали следующие:

            let jsonData = JSON.stringify({test: "Test"});
            let data = { data: jsonData };

            $.ajax({
                type: "POST",
                url: "SomePage.aspx/DoStuff",
                data: JSON.stringify(data),
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: OnSuccess,
                failure: function (response) {
                    alert(response.d);
                }
            });
0 голосов
/ 30 апреля 2020

Попробуйте выполнить синтаксический анализ данных json в объекте JO, если вы используете newtonsoft, или JSONDocument, если хотите использовать библиотеку Microsoft 101 * в. net core 3 System.Text. Json

https://www.newtonsoft.com/json/help/html/ParseJsonObject.htm

https://docs.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-how-to#use -зонд-документ для доступа к данным

Пример использования System.Text. Json

using (JsonDocument jsonDoc = JsonDocument.Parse(data))
{
    JsonElement root = jsonDoc.RootElement;
    JsonElement dataEl = root.GetProperty("Data");
    var testEl = dataEl.GetProperty("Test")
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...