C# Rest 服务 - 无法在服务方法中接收 JSON 请求

Posted

技术标签:

【中文标题】C# Rest 服务 - 无法在服务方法中接收 JSON 请求【英文标题】:C# Rest service - unable to receive JSON request inside service method 【发布时间】:2018-01-01 08:35:09 【问题描述】:

我有一个 REST 服务,它接受来自客户端的 JSON 数据。我能够使用 .Net 类从客户端检索 JSON 输入。但我想以 JSON 字符串格式检索数据,而不是作为类对象。

这是我迄今为止尝试过的。

输入 JSON

<input id="Text3" type="text" value=' "searchBy": "Pending Cases", "displayOptions": [ "producers": "yes", "GA/BGA/Firm": "yes"],"userId": "xxx", "userAuthToken": "0000" ' /></p>

通过 javascript 调用服务

function CallService()
    
        var inputJSON = $("#Text3").val();
        var endpointAddress = $("#Text1").val();
        var url = endpointAddress + $("#Text2").val();

        $.ajax(
            type: 'POST',
            url: url,
            contentType: 'application/json',
            data: inputJSON,
            success: function (result)                     
                $("#Text4").val(" " + JSON.stringify(result));
            
        );

    

服务端 - 合同

[OperationContract]
    [WebInvoke(
        Method = "POST",
        BodyStyle = WebMessageBodyStyle.Bare,
        RequestFormat = WebMessageFormat.Json,
        ResponseFormat = WebMessageFormat.Json)]
    string SearchPredefined(PredefinedSearchRequestModel PredefinedSearchRequest);

服务方法的实现

public string SearchPredefined(PredefinedSearchRequestModel PredefinedSearchRequest)
    
        string outputStr = "PredefinedSearchRequest Object gets successfully populated here ";
        return outputStr;
    

模型类

[DataContract]
public class PredefinedSearchRequestModel

    [DataMember]
    public string searchBy  get; set; 

    [DataMember]
    public List<displayOptionsModelPredefined> displayOptions  get; set; 

    [DataMember]
    public string userId  get; set; 

    [DataMember]
    public string userAuthToken  get; set; 



[DataContract]
[Serializable]
public class displayOptionsModelPredefined

    [DataMember]
    public string producers  get; set; 

    [DataMember(Name="GA/BGA/Firm")]
    public string firm  get; set; 

到目前为止,这些代码运行良好。当客户端使用 JSON 数据调用我的服务时,服务方法被命中并且模型对象被成功填充。

但是,我需要从我的服务中使用相同的 JSON 字符串调用另一个 3rd 方服务。这就是为什么我需要原始 JSON/字符串格式的输入数据,而不是 C# 对象。

如何将服务器端的数据作为 JSON 字符串获取?

【问题讨论】:

【参考方案1】:

我建议使用 NewtonSoft 在 SearchPredefined 中序列化对象并将结果传递给:

var serializedObject = Newtonsoft.Json.JsonConvert.SerializeObject<PredefinedSearchRequestModel>(PredefinedSearchRequest);

【讨论】:

以上是关于C# Rest 服务 - 无法在服务方法中接收 JSON 请求的主要内容,如果未能解决你的问题,请参考以下文章

在 VS 中使用附加参数调试 REST 服务

如何在C#中解析/反序列化从rest服务返回的JSON

无法以 GET 类型的方法将字典作为参数传递给 WCF REST 服务

AngularJS、REST、C# 服务、405 - 不允许发布方法

使用C#快速搭建Rest服务

如何在 C# 中正确使用 WCF REST API 上的 Stream 将文件(图像/视频/等)上传到服务器?