2016-05-18 55 views
2

我有一個與Response.Redirect問題,儘管閱讀大量的帖子,我一直無法解決我的特定問題。正確的方式來使用Response.Redirect

我正在處理的網站通過web服務與第三方集成。 Web服務按預期返回結果,之後我們會做一些內務處理,然後重定向到第三方提供的url。

這裏發生了什麼:

如果我們得到一個特定的反應回來,我們希望通過在響應

  1. 我們提出要求,並提供了鏈接重定向到一個下屬網站收到響應
  2. 我們更新數據庫SQL
  3. 我們使用System.Net發送郵件發送

之後,我們要重定向;

Response.Redirect(resp.RedirectUrl, false); 
Context.ApplicationInstance.CompleteRequest(); 

儘管使用了似乎是正確的方法,但我的第三方通知我,我們獲得的失敗重定向的百分比很高。在代碼樹中較高,有很多錯誤捕獲,所以當它到達這一點時,它應該是一個簡單的重定向的情況。

我知道這可能不是我們的最終目標,並且已經請求了一些模式數據來確定「誰」和「何時」發生。

與此同時,我試圖確保我們的方面儘可能健壯,所以我有幾個問題。

  1. 上述方法有什麼根本錯誤嗎?
  2. 是否可以使用更好的方法?
  3. 有什麼我能/應提前測試

感謝。

+0

這似乎也將與您傳遞到重定向請求的URL,而不是重定向請求本身的問題。如果您確定從網絡服務傳遞了正確的網址,那麼它似乎是第三方的問題。 – anothershrubery

+0

你是否需要Context.ApplicationInstance.CompleteRequest();呼叫? 嘗試沒有,也許? 我沒有看到你在做什麼真的錯了。我的猜測是問題在他們的最後。 –

+0

@anothershrubery - 我只是在進行檢查以確保其有效的Uri - 我知道它本身不會阻止您描述的問題,但它會過濾掉任何畸形的URL。 –

回答

2

使用此代碼

Response.Redirect(resp.RedirectUrl, false); 
Context.ApplicationInstance.CompleteRequest(); 

你讓你的網站運行和其他代碼(上線的休息和在頁面的生命週期事件的其餘部分)是不大概測試(因爲你相信沒有運行並重定向),或者可能有一些空值,在那裏你會得到異常 - 在實際重定向之前運行的代碼。

嘗試使用代碼,即停止程序

Response.Redirect(resp.RedirectUrl, false); 
return; 

與的進一步執行,你得到一個ThreadAbortException例外,但你需要停止你的程序的進一步運行與控制的停車。

相對 Redirect to a page with endResponse to true VS CompleteRequest and security thread

-1

由於從第三方接收到目標URL,所以在將它們保存在數據庫中之後。你可以使用'Sever.Transfer'而不是'Response.Redirect'。

Response.Redirect會導致往返,因此會有延遲。

目標URL將由不同的域/ Web服務器處理,而不是來自您的應用程序服務器。

因此,Server.Transfer將是此重定向操作的最佳選擇。

+0

我當然可以放棄這一點。 –

+0

避免'Server.Transfer' Server Transfer會帶來更多問題並且難以處理您的頁面。你必須在極少數情況下使用它,你絕對知道你在做什麼,沒有別的選擇。 (在任何情況下@JohnOhara測試過,你明白我的意思......) – Aristos