xm在wcf rest服务响应中被改变为什么?

时间:2013-10-11 10:52:29

标签: c# javascript html5 wcf wcf-rest

Followin是我的OperationContract

[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Xml,
        BodyStyle = WebMessageBodyStyle.Wrapped,
        UriTemplate = "/send?canvasbyte={imgbyte}")]
string sendresponse(string imgbyte);

以下是我的OperationContract实现,我在这里返回一个相同的参数(字符串)

public string sendresponse(string imgbyte)
{
            return imgbyte;
}

我正在使用HTML5客户端应用程序测试此服务,我从java脚本发送xmlHttpRequest作为get方法 在url中传递的值是Canvas Drawing的DataUrl。

var canvas = document.getElementById('canvasid');
console.log(canvas.toDataURL());
var url = "http://myserverurl.com/ServiceImpl.svc/send?canvasbyte=" +          canvas.toDataURL().toString();
var xmlHttp = new XMLHttpRequest();
xmlHttp.onload = function () {

    var xmldocument = xmlHttp.responseText;
    console.log(xmlHttp.responseText);

};
xmlHttp.open("GET", url, true);
xmlHttp.send();

这是我的客户端代码,canvas dataurl是一个大文本值。 服务收到并返回相同的事情 但是在这里我得到了一些结果的改变。为什么?? 我想我在结果中遗漏了一些“+”符号。

2 个答案:

答案 0 :(得分:1)

浏览器将加号解释为空格。

由于您使用的是GET方法,因此请求数据最终会出现在查询字符串中(如果可以,最好使用POST)。

由于数据位于查询字符串中,服务器会自动将+更改为空格。

这是一个可能有所帮助的主题。

Plus sign in query string

答案 1 :(得分:0)

该代码存在太多问题。

首先,默认的IIS配置不允许任何长于2000个字符的网址。 第二,get要求传递转义值,name=Files/John Doe变为name=Files%2FJohn+Doe,这不仅仅是+符号。

尝试将数据发布到您的方法。