Веб-сервис ASP.Net не возвращает JSON - всегда XML - PullRequest
2 голосов
/ 27 февраля 2012

Я пытаюсь создать простой тест AJAX и веб-службы (используя C # .Net 2.0) для возврата данных в формате JSON, и у меня есть (я считаю) все, что мне нужно, но я продолжаю сталкиваться с той же проблемой иснова.Ответ от веб-службы всегда XML.(В первой строке всегда указывается <?xml version="1.0" encoding="utf-8"?>).

Я пробовал различные варианты, которые входят в тэг ScriptMethod, но ничего не имеет значения.

Вызов работает нормально,но я получаю "parsererror" с ответом, который я ожидаю, так как он не является допустимым JSON.Я могу вызвать метод веб-службы в браузере и получить ожидаемое возвращаемое значение только в формате XML.Fiddler также показывает, что запрос и ответ такие же, как я нашел.

Здесь уже есть несколько вопросов по точно такой же проблеме, но ни один из них не дал мне рабочего ответа.

Пожалуйста, задавайте вопросы, если вам нужна дополнительная информация.

C #

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.Services;
using System.Web.Script.Services;
using System.Web.Script.Serialization;

namespace jQueryWebServiceTest
{
    /// <summary>
    /// This is a simple web service to test calling from javascript using AJAX, and getting a response.
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    [ScriptService]
    public class Service1 : System.Web.Services.WebService
    {
        [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public string SayHello()
        {
            //  I've tried both this...
            var response = new { value = "Hello" };
            JavaScriptSerializer json = new JavaScriptSerializer();
            return json.Serialize(response);

            //  and this...
            return "Hello";
        }
    }
}

Javascript

$(function () {

    var data = JSON.stringify({ Name: "John" });  // This is not used - part of other testing.
    data = "{}";

    $.ajax({
        type: "POST",
        data: data,
        url: "TestService.asmx/SayHello",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            console.log(data);
        },
        error: function (error, status) {
            console.log("status = " + status);
            console.log(error);
        }
    });

});

1 Ответ

2 голосов
/ 27 февраля 2012

Мне удалось заставить его работать, добавив следующие 2 блока в web.config ...

В блоке configuration внутри system.web ...

<assemblies>
    <add assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</assemblies>

и где-нибудь еще, внутри system.web ...

<httpHandlers>
    <remove verb="*" path="*.asmx"/>
    <add verb="*" path="*.asmx" type="System.Web.Script.Services.ScriptHandlerFactory" validate="false"/>
</httpHandlers>
...