【问题标题】:WCF post data converting to raw html instead of Json formatWCF 发布数据转换为原始 html 而不是 Json 格式
【发布时间】:2014-01-09 18:53:50
【问题描述】:

对 WCF 非常陌生,除了从 JQuery 到 WCF 的帖子之外,几乎一切正常。

Jquery 正在处理 DynaTree 并将数据发布到 WCF 服务。 到现在为止还挺好。

当我调试时,我发现在 WCF 例程中作为 Stream 接受的发布数据是原始格式并且包含 HTML 字符 %...

我期待帖子以 Json 格式发送数据,但不清楚问题出在哪里。 事实上,我不得不在 Post 操作中注释掉内容类型,因为它会产生一个错误,指出需要 RAW 格式。

WCR URL 请求类似于 localhost/TS.svc/SaveTree/New?username=thisuser

    [OperationContract]
    [WebInvoke(Method = "POST",
    RequestFormat = WebMessageFormat.Json, 
    ResponseFormat = WebMessageFormat.Json,
    UriTemplate = "SaveTree/New",
    BodyStyle = WebMessageBodyStyle.Wrapped)]

    public List<TreeNode> SaveTree(Stream data)
    {
        string username = HttpContext.Current.Request.QueryString["username"] ?? string.Empty; 

        var jsonString = new StreamReader(data).ReadToEnd(); 

...}

JQuery 端:

onDrop: function(node, sourceNode, hitMode, ui, draggable) {

            sourceNode.move(node, hitMode);

            var dict = $("#tree").dynatree("getTree").toDict();

            var postData = JSON.stringify(dict); 
            $.ajax({

                type: "POST",

                url: "TS.svc/SaveUserTree/New?userame=" + $("#hdnUserFile").val(),

                //contentType: "application/json; charset=utf-8",

                dataType: "json",

                data: {tree:postData},

请帮忙。谢谢,

【问题讨论】:

    标签: json wcf dynatree


    【解决方案1】:

    由于您删除了contentType: "application/json; charset=utf-8",您的内容类型现在是application/x-www-form-urlencoded; charset=UTF-8

    所以,您看到的是 URL 编码的 JSON。要将其解码为实际的 JSON,您可以使用:

    var decodedJSON = HttpUtility.UrlDecode(jsonString);
    

    【讨论】:

    • 这行代码很有帮助。谢谢你。我在 Jquery 方面做了一件事,即使不使用这个解决方案也有帮助。唯一的问题是我不知道它是如何工作的。在 Dynatree 的 post 操作中,我传入了 data: {tree:postData} ,而作为解决方法,我只是尝试传入 data: postData ,然后它就开始正常工作了。保险起见,我将保留您提供的代码行 - 以防万一。再次感谢。
    • 只有在需要时才会对 JSON 进行 url 编码。例如,如果它包含space,它被编码为+&amp; 被编码为%26 等等。如果 JSON 不包含任何在 url 中被认为是特殊的字符,那么编码的 JSON 将是相同的作为 orifinal JSON,在这种情况下,它似乎无需解码即可工作。如果你是从 ajax 发送 url 编码的数据,最好还是保留解码行的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 2011-07-19
    • 1970-01-01
    • 2021-07-21
    • 2017-06-17
    相关资源
    最近更新 更多