ASP.Net web服务赢得';t返回JSON-始终为XML

本文关键字:JSON- 返回 XML web Net 服务 ASP | 更新日期: 2023-09-27 18:26:00

我正在尝试创建一个简单的AJAX&web服务测试(使用C#.Net 2.0)以JSON格式返回数据,我已经(相信)了我需要的一切,但我一次又一次地遇到同样的问题。来自web服务的响应始终是XML。(它总是将<?xml version="1.0" encoding="utf-8"?>作为第一行)。

我已经尝试了ScriptMethod标记中的各种选项,但没有任何区别。

该调用工作正常,但我得到了一个带有响应的"parserror",这是我所期望的,因为它不是有效的JSON。我可以在浏览器中调用web服务方法,并获得我期望的返回值,只需使用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);
        }
    });
});

ASP.Net web服务赢得';t返回JSON-始终为XML

我通过将以下2个块添加到web.config…中使其工作

system.web内部的configuration块中。。。

<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>