【问题标题】:ASP.Net web service won't return JSON - Always XMLASP.Net Web 服务不会返回 JSON - 始终是 XML
【发布时间】:2012-02-27 17:14:50
【问题描述】:

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

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

调用工作正常,但我得到一个带有响应的“解析器错误”,这是我所期望的,因为它不是有效的 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);
        }
    });

});

【问题讨论】:

  • 看看这个答案:stackoverflow.com/a/663860/701062
  • 谢谢加里。我已经看过那个了,但是因为我使用的是.Net 2.0,所以它不相关(我会修改问题以反映这一点)。还是谢谢你。
  • @Archer 实际上你必须使用.Net 3.5。直到那个版本才引入 ScriptMethod 属性。
  • @JamieSee 你可以在 .Net 2 中使用 AJAX 扩展(我认为实际上是 .Net 1),只要你有对相关库的引用(我有或它不会)编译或运行。)谢谢。
  • 也许这是 AJAX 扩展的问题?如果您在不使用旧扩展库的情况下将其作为 3.5 进行尝试,它会起作用吗?另外,我发现了一个可能有帮助的线程:forums.asp.net/t/1054378.aspx

标签: c# jquery ajax web-services asmx


【解决方案1】:

我设法通过将以下 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>

【讨论】:

    猜你喜欢
    • 2012-02-26
    • 2023-04-05
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    相关资源
    最近更新 更多