调用跨域代理时出现Json Date格式问题

时间:2010-04-27 10:41:12

标签: javascript jquery json

我正在使用代理服务来允许我的客户端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

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

如果您要发布数据,是否需要UrlDecode?如果加号按原样进入UrlDecode,我猜它会被转换为空格,这可能会导致日期格式问题。你究竟会从哪里得到错误?

答案 1 :(得分:0)

证明这一行不是必要的

string data = HttpUtility.UrlDecode(requestData);

答案 2 :(得分:0)

好吧,看起来你的ashx没有直接通过请求/响应,对吧?它正在改变它。我不是.net的人,也不知道你的代码在做什么,但我会说你应该确保它尽可能少。在创建代理页面时,另一个需要注意的是,您是在直接发送响应,还是在开始发送之前将其加载到代理的内存中。我相信,最好的方法就是在代理收到数据时简单地传递数据。