首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Webservice忽略ResponseFormat.Json

Webservice忽略ResponseFormat.Json
EN

Stack Overflow用户
提问于 2013-06-21 21:03:05
回答 3查看 2.3K关注 0票数 1

我想在我的上执行一个简单的$.ajax POST,返回asp.net。我已经尝试了所有可能的解决方案,但没有任何运气。我是不是遗漏了什么?

我的jQuery代码:

代码语言:javascript
复制
$.ajax({
    type: "POST",
    url: "/Services/ConfiguratorService.asmx/GetInitialJson",
    contentType: "application/json; charset=utf-8",
    data: "{}",
    dataType: "json",
    success: function (data, textStatus, jqXhr) {
        if (data != null) {
            alert(data.d);
        } else {
            alert("data undefined: | " + jqXhr + " | " + textStatus);
        }
    },
    error: function (jqXhr, textStatus, errorThrown) {
        alert(jqXhr + " | " + textStatus + " | " + errorThrown);
    }
});

我的asmx.cs代码:

代码语言:javascript
复制
[WebMethod(Description = "Gets initial configuration values for Configurator")]
[ScriptMethod(ResponseFormat = ResponseFormat.Json, XmlSerializeString = false)]
public ConfiguratorModel GetInitialModel()
{
    return new Item { Title: "10 units", Text: "Item text..." };
}
public class Item { public string Title {get; set;} public string Text {get; set;} }

更新1:在我的解决方案中,我得到了一个响应,但仅以XML形式返回。我试图在一个新的解决方案中重现这个错误,但没有成功。一切都运行得很好。新旧解决方案中的.asmx服务实际上都返回相同的响应。唯一的区别是其中之一的jquery失败,错误为: parsererror,意外的token <

更新2:我的旧解决方案中的响应头总是"text/xml;charset=utf-8“。

更新3:我的web.config包含了所需的所有条目。响应仍然是"text/xml;charset=utf-8“。为什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-25 20:26:49

我的一位同事帮我指了指方向。我发现处理程序是asp.net 2.0。今年早些时候,该解决方案从2.0升级到4.0。我所要做的就是替换:

代码语言:javascript
复制
<add name="WebServiceHandlerFactory-Integrated" path="*.asmx" verb="GET,HEAD,POST,DEBUG" type="System.Web.Services.Protocols.WebServiceHadlerFactory, System.Web.Services, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" modules="ManagedPipelineHandler" scriptProcessor="" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false" preCondition="integratedMode" responseBufferLimit="4194304" />

通过以下方式:

代码语言:javascript
复制
<add name="WebServiceHandlerFactory-Integrated-4.0" path="*.asmx" verb="GET,HEAD,POST,DEBUG" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />

一个好主意是尝试临时删除所有处理程序,只添加:

代码语言:javascript
复制
<add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
票数 1
EN

Stack Overflow用户

发布于 2013-06-21 21:06:06

使用static关键字调用方法,就像定义静态方法一样

代码语言:javascript
复制
public static ConfiguratorModel GetInitialModel()
{
    return new Item { Title: "10 units", Text: "Item text..." };
}
票数 0
EN

Stack Overflow用户

发布于 2013-06-21 21:06:25

我有这样的web服务:

代码语言:javascript
复制
[WebService(Namespace = "http://example.com/")]
[System.Web.Script.Services.ScriptService]
public class api : System.Web.Services.WebService {
    [WebMethod(EnableSession = true)]
    public ServiceResponse<string> SignIn(string _email, string _password) {...}
}

还有像你这样的$.ajax电话。对我来说一切都很好。您可能需要将[System.Web.Script.Services.ScriptService]添加到服务类中。据我所知,这是JSON响应的关键。jQuery调用如下所示:

代码语言:javascript
复制
$.ajax({
      type: "POST",
      url: "/api.asmx/SignIn",
      dataType: "json",
      data: JSON.stringify({"_password": pwd,
                            "_email": email
                        }),
      contentType: 'application/json; charset=utf-8',
      success: function (res) { }
   });

编辑:

代码语言:javascript
复制
public ConfiguratorModel GetInitialModel()
{
    return new Item { Title: "10 units", Text: "Item text..." };
}

此方法定义看起来是错误的。当返回类型为ConfiguratorModel时,我不明白如何返回Item。这在编译时肯定会失败。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17235928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档