当前位置: 首页 > 面试题库 >

将JSON发送到WCF Rest Service-对象始终为null

龙珂
2023-03-14
问题内容

我试图通过使用REST,WCF和JSON(所有这些技术的新功能)使我的应用程序正常工作。我的“ GET”工作正常。是导致我出现问题的“ POST”。

正如您将在下面看到的那样,我使用JSON.stringify“打包”
JSON,然后将POST启动到REST资源。但是,当对象进入处理请求的WCF方法时,该对象始终为null。

这是代码:

$.ajax({
    type: "POST",
    dataType: "json",
    url: "Services/ContactCompanyService.svc/contactcompanies/customers",
    contentType: "application/json; charset=utf-8",
    data: JSON.stringify({ contactcompany: newCustomer }),
    success: function (html) { alert(html); }
});

这是配置的东西:

<services>
  <service behaviorConfiguration="ServiceBehaviour" name="ContactCompanyService">
    <endpoint address="contactcompanies" behaviorConfiguration="web" binding="webHttpBinding" contract="IContactCompanyService"/>
  </service>

</services>

<behaviors>
  <endpointBehaviors>
    <behavior name="web">
      <webHttp/>
      <enableWebScript/>
    </behavior>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior name="ServiceBehaviour">
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="false"/>
    </behavior>
    <behavior name="">
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="false"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true"/>

这是合同:

    [OperationContract]
    [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "customers")]
    [return: MessageParameter(Name = "ContactCompany")]
    ContactCompany AddContactCompany(ContactCompany ContactCompanyObject);

这是实现上述接口的方法,其中ContactCompanyObject为null。

我到底在做什么错?请不要排除我的愚蠢。

进一步:我将WebMessageBodyStyle更改为.Bare,这导致对象不为null
…但该对象的EVERY属性均为null。就是说,包裹是我想走的路。

我将不胜感激。让我知道您是否需要更多信息。

更新

我从头开始了一个全新的项目-剥离了。

我得到的结果完全相同-当WCF代码接收到该对象时,该对象为null。

这是我在这个新测试项目中所做的事情。

WCF合同:

(在名称空间下:NullTestService

[ServiceContract]
public interface IService1
{
    [OperationContract]
    [WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "NullTestPost")]
    [return: MessageParameter(Name = "NullTestType")]
    NullTestType GettMethod();

    [OperationContract]
    [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "NullTestPost")]
    [return: MessageParameter(Name = "NullTestType")]
    NullTestType PostMethod(NullTestType NullTestTypeObject);
}

[DataContract]
public class NullTestType
{
    [DataMember]
    public string NullTestString { get; set; }
    [DataMember]
    public int NullTestInt { get; set; }
}

服务实现:(相同的名称空间)

    public class Service1 : IService1
{
    public NullTestType PostMethod(NullTestType NullTestTypeObject)
    {
        return NullTestTypeObject;
    }

    public NullTestType GettMethod()
    {
        return new NullTestType { NullTestString = "Returned String", NullTestInt = 25 };
    }

}

网站项目。Service.svc:

<%@ ServiceHost Service="NullTestService.Service1" %>

Web项目中的web.config:

    <system.serviceModel>
<services>
  <service behaviorConfiguration="ServiceBehaviour" name="NullTestService.Service1">
    <endpoint address="nulltestaddress" behaviorConfiguration="web" binding="webHttpBinding" contract="NullTestService.IService1"/>
  </service>

</services>

<behaviors>
  <endpointBehaviors>
    <behavior name="web">
      <webHttp/>
    </behavior>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior name="ServiceBehaviour">
      <serviceMetadata httpGetEnabled="false" />
      <serviceDebug includeExceptionDetailInFaults="false"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
</system.serviceModel>

最后是Web项目中的jQuery:

$(function () {


//        $.ajax({
//            type: "GET",
//            url: "http://localhost:8080/TestWeb/Service.svc/nulltestaddress/nulltestpost",
//            success: alertResult
//        });

alert('about to do it');

$.ajax({
    type: "POST",
    url: "http://localhost:8080/TestWeb/Service.svc/nulltestaddress/nulltestpost",
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    data: '{"NullTestType":{"NullTestString":"This is a post string","NullTestInt":25}}',
    success: alertResult
});

});

function alertResult(data) {
        alert(data.NullTestType.NullTestString);
}

所以。(注释掉)GET可以正常工作并返回JSON。POST不这样做。在线上:

public NullTestType PostMethod(NullTestType NullTestTypeObject)
{
    return NullTestTypeObject;
}

(“返回”行)NullTestTypeObject始终为NULL。

我将非常感谢您的帮助。我为此花了很多时间。


问题答案:

如果要包装,则需要将请求包装在操作参数名称中:

var input = { "ContactCompanyObject" : newCustomer };
$.ajax({
   data: input
   ...
});

或对于第二个示例,如果将ajax调用更改为如下所示,则应获得预期的结果:

var input = { NullTestTypeObject: { NullTestString: "Hello", NullTestInt: 123} };
alert("Input: " + JSON.stringify(input));
$.ajax({
    type: "POST",
    url: "./Service1.svc/nulltestaddress/NullTestPost",
    contentType: "application/json",
    data: JSON.stringify(input),
    success: function (result) {
        alert("POST result: " + JSON.stringify(result));
    }
});


 类似资料:
  • 问题内容: 我正在尝试将JSON对象从Javascript / Jquery发送到PHP,并且在控制台中收到错误消息msg。我究竟做错了什么。我是JS和PHP的新手。 jQuery文件: PHP文件 问题答案: 菲尔(Phil)的出色回答,但自从OP标题说 从javascript( 不是jQuery )发送json对象到php 这是使用(原始)javascript的方法,以防万一有人寻找此方法:

  • 问题内容: 我有一个REST Web服务配置如下: 我的Tomcat服务器的配置如下: 我创建的POJO如下所示: } 我创建一个测试客户端以测试createUser方法: 但是我收到以下错误: 奇怪的是,当我将所有内容更改为appliction / xml时,它都能正常工作 知道为什么Json不能为我工作吗? 问题答案: 您正在执行: 这是不对的。您应该将真实的JSON字符串发送到您的服务。 获

  • 问题内容: 这里已经有一些类似的帖子,并且尝试了所有建议的解决方案,但仍然无法正常工作……我无法在控制器内部获取值,它始终为null。下面是代码。我想念什么吗? 客户端javascript MVC控制器 模型 问题答案: 谢谢你们的指导和解决方案。解决方案是您所有建议的组合,因此我决定将其汇总在一篇文章中。 解决问题的方法如下: 应该是(如上面的Ant P建议) json数据应采用(如上面的Ant

  • 问题内容: 我正在寻找通过GET将JSON对象发送到服务器。克里斯关于通过JSON将对象数组发布到ASP.Net MVC3的答案适用于httpPOST,但不适用于GET。我的情况也适用于POST,但不适用于GET。如何使GET工作正常这是我的情况:在Controller中,我有以下方法publicActionResult Screenreport(Screentable screendata) 我

  • 问题内容: 我已经为此工作了3个小时,已经放弃了。我只是试图使用jQuery将数据发送到ASP.NET WebMethod。数据基本上是一堆键/值对。因此,我尝试创建一个数组并将这些对添加到该数组中。 我的WebMethod(aspx.cs)看起来像这样(对于我在JavaScript中构建的内容,这可能是错误的,我只是不知道): 这是我的示例JavaScript: 这是我的jQuery AJAX调

  • 问题内容: 我正在使用Symfony 2开发一个项目,我已经建立了一个捆绑包来处理我的所有数据库服务,这些服务来回传递JSON数据。 我的问题/问题: 是否可以发布简单的JSON对象?目前,我通过给对象起一个名字来欺骗我的ajax调用的普通表单帖子,如果我不给它起一个名字,我似乎无法从Symfony请求对象中获取数据。 我希望能够使用一个服务包来处理来自AJAX调用或常规Symfony形式的数据。