[英]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
}
您可能引用了在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.