2010-04-27 71 views
0

當我使用的是代理服務,讓我的客戶端的JavaScript跟一個服務上的另一個域問題使用JSON日期格式調用跨域代理

代理是一個簡單的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

任何想法中提到?

回答

1

如果您要發佈數據,您是否需要UrlDecode?如果加號按原樣進入UrlDecode,我猜它會被轉換爲空格,這可能會導致日期格式問題。你從哪裏來的錯誤究竟在哪裏?

0

原來這條線時並不需要

string data = HttpUtility.UrlDecode(requestData); 
0

嗯,看起來像你的ashx不流通請求/響應直通,對不對?它正在改變它。我不是一個.net人,也不知道你的代碼在做什麼,但我會說你應該確保它儘可能少。在創建代理頁面時,另一個要注意的問題是,您是直接發送響應,還是在開始發送代理之前將其加載到代理的內存中。我相信最好的方法就是在您的代理接收數據時簡單地傳遞數據。