簡體   English   中英

是否存在阻止Response.Redirect在try-catch塊內工作的東西?

[英]Is there something that prevents Response.Redirect to work inside try-catch block?

我在response.redirect()得到了一些奇怪的錯誤,而且項目根本沒有構建..當我刪除了圍繞代碼塊的try-catch塊時, Response.Redirect()在其中正常工作..

只是想知道這是一個已知的問題還是什么......

如果我沒記錯的話, Response.Redirect()拋出一個異常來中止當前請求( ThreadAbortedException或類似的東西)。 所以你可能會抓住那個例外。

編輯:

知識庫文章描述了此行為(也適用於Request.End()Server.Transfer()方法)。

對於Response.Redirect() ,存在一個重載:

Response.Redirect(String url, bool endResponse)

如果傳遞endResponse=false ,則不會拋出異常(但運行時將繼續處理當前請求)。

如果endResponse=true (或者如果使用了其他重載),則拋出異常並立即終止當前請求。

正如Martin所指出的,Response.Redirect拋出一個ThreadAbortException。 解決方案是重新拋出異常:

try  
{
   Response.Redirect(...);
}
catch(ThreadAbortException)
{
   throw; // EDIT: apparently this is not required :-)
}
catch(Exception e)
{
  // Catch other exceptions
}

Martin是正確的,當您使用Response.Redirect時會拋出ThreadAbortException,請參閱此處kb文章

您可能引用了在try塊中聲明的變量。

例如,以下代碼無效:

try
{
  var b = bool.Parse("Yeah!");
}
catch (Exception ex)
{
  if (b)
  {
    Response.Redirect("somewhere else");
  }
}

您應該將b聲明移出try-catch塊之外。

var b = false;
try
{
  b = bool.Parse("Yeah!");
}
catch (Exception ex)
{
  if (b)
  {
    Response.Redirect("somewhere else");
  }
}

我認為這里沒有任何已知問題。

你根本無法在try / catch塊中執行Redirect(),因為Redirect將當前控件留給另一個.aspx(例如),這使得catch無法返回(無法返回到它)。

編輯:另一方面,我可能已經把所有這一切都推倒了。 抱歉。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM