如何在不使用查询字符串的情况下使用 WCF 在 UriTemplate 中传递 JSON 字符串

Posted

技术标签:

【中文标题】如何在不使用查询字符串的情况下使用 WCF 在 UriTemplate 中传递 JSON 字符串【英文标题】:How to pass JSON string in UriTemplate using WCF without using Query string 【发布时间】:2017-12-24 07:14:11 【问题描述】:
http://localhost:51238/RestService.svc/FOSLoadingS1Opening?Data=[
 
"Name":"Sachin", 
"City":"Bengalueu", 
"FimStatus":"false", 
"Deno1":"50", 
"Deno2":"100", 
"Deno3":"500", 
"Deno4":"2000", 
"IndtVal1":"2500", 
"IndtVal2":"5000"  ]

我可以通过查询字符串传递 json 字符串。但是,当我想通过没有查询字符串的传递时,我得到了错误。

http://localhost:51238/RestService.svc/FOSLoadingS1Opening/[
 
"Name":"Sachin", 
"City":"Bengalueu", 
"FimStatus":"false", 
"Deno1":"50", 
"Deno2":"100", 
"Deno3":"500", 
"Deno4":"2000", 
"IndtVal1":"2500", 
"IndtVal2":"5000"  ]

当我通过上面的 URL 时,我收到错误“错误请求”。

我想在不使用查询字符串的情况下传递 json 字符串。请建议如何实现。

【问题讨论】:

唯一的方法是使用webinvoke(post)而不是webget 【参考方案1】:

您必须将WebInvoke 与 POST 方法一起使用。

[OperationContract]
[WebInvoke(Method = "POST",
            RequestFormat = WebMessageFormat.Json,
            ResponseFormat = WebMessageFormat.Json,
            UriTemplate = "SaveData/id")]
string SaveData(YourType typeObj);

现在从客户端构造对象并通过ajax调用发送json字符串化数据。

    var obj = 
        "Name":"Sachin", 
        "City":"Bengalueu", 
        "FimStatus":"false", 
        ...
    ;
    $.ajax(
        type: "POST",
        url: "http://localhost/wcf.svc/SaveData/0",
        data: JSON.stringify(obj),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        processData: true,
        success: function (data, status, jqXHR) 
            alert("success..." + data);
        ,
        error: function (xhr) 
            alert(xhr.responseText);
        
    );

【讨论】:

以上是关于如何在不使用查询字符串的情况下使用 WCF 在 UriTemplate 中传递 JSON 字符串的主要内容,如果未能解决你的问题,请参考以下文章

在WCF中,自定义Authentication,Validate方法,抛出错误异常时如何在不停止服务的情况下处理异常?

WCF反序列化如何在不调用构造函数的情况下实例化对象?

我们如何在不重新加载页面的情况下使用 javascript/jQuery 更新 URL 或查询字符串?

如何在不重新加载的情况下修改 URL 查询字符串

如何在不使用窗口函数的情况下在大查询中选择 max(date)?

在不使用 WIFI 的情况下在 WCF 服务调用中包含 SAML 2.0 令牌