我正在使用代理服务来允许我的客户端javascript与另一个域上的服务进行通信
代理是一个简单的ashx文件,只需获取请求并将其转发到另一个域上的服务:
using (var sr = new System.IO.StreamReader(context.Request.InputStream))
{
requestData = sr.ReadToEnd();
}
string data = HttpUtility.UrlDecode(requestData);
using (var client = new WebClient())
{
client.BaseAddress = serviceUrl;
client.Headers.Add("Content-Type", "application/json");
response = client.UploadString(new Uri(webserviceUrl), data);
}
调用此代理的客户端javascript如下所示
function TestMethod() {
$.ajax({
type: "POST",
url: "/custommodules/configuratorproxyservice.ashx?m=TestMethod",
contentType: "application/json; charset=utf-8",
data: JSON.parse('{"testObj":{"Name":"jo","Ref":"jones","LastModified":"\/Date(-62135596800000+0000)\/"}}'),
dataType: "json",
success: AjaxSucceeded,
error: AjaxFailed
});
function AjaxSucceeded(result) {
alert(result);
}
function AjaxFailed(result) {
alert(result.status + ' - ' + result.statusText);
}
}
这一切正常,直到我必须通过约会。当代理尝试调用服务时,我收到错误请求错误。
也就是说,如果我从json数据中删除,"LastModified":"\/Date(-62135596800000+0000)\/"
,则调用成功。重新加入它就会失败。
如果我从同一个域进行呼叫就没问题了,只有当它通过代理才会失败时才会发生。
我确实有过这方面的工作,但现在已经失去了它。
在发送之前尝试在对象上使用JSON.Parse。和JSON.Stringify,但没有快乐
任何人都有任何想法我缺少什么?
还尝试了本文中提到的自定义解析器方法 http://www.west-wind.com/Weblog/posts/896411.aspx
有什么想法吗?
答案 0 :(得分:1)
如果您要发布数据,是否需要UrlDecode?如果加号按原样进入UrlDecode,我猜它会被转换为空格,这可能会导致日期格式问题。你究竟会从哪里得到错误?
答案 1 :(得分:0)
证明这一行不是必要的
string data = HttpUtility.UrlDecode(requestData);
答案 2 :(得分:0)
好吧,看起来你的ashx没有直接通过请求/响应,对吧?它正在改变它。我不是.net的人,也不知道你的代码在做什么,但我会说你应该确保它尽可能少。在创建代理页面时,另一个需要注意的是,您是在直接发送响应,还是在开始发送之前将其加载到代理的内存中。我相信,最好的方法就是在代理收到数据时简单地传递数据。