簡體   English   中英

在 .net 中不使用 Response.Redirect(url) 發生錯誤時重定向到自定義頁面?

[英]Redirect to custom page in case of error without using Response.Redirect(url) in .net?

我有一個 asp.net 4.5 MVC web 項目。 在 web.config 中,我有這些行:

...
<httpErrors errorMode="DetailedLocalOnly">
      <clear />
      <error statusCode="404" path="/PageErrors/GeneralError.aspx?e=404" responseMode="ExecuteURL" />
...
</httpErrors>
...
<system.web>
   <customErrors mode="RemoteOnly" defaultRedirect="~/PageErrors/GeneralError.aspx" />
...
</system.web>

我想要的是在不使用 Response.Redirect(url) 的情況下,將用戶重定向到 GeneralError 頁面,以防在后面的代碼上的函數 DoProcess(..) 中發生錯誤。 我嘗試的是使用代碼 404 手動引發錯誤(也嘗試了其他數字):

public void DoProcess(..)
{
   try
   {
      ...
   }
   catch(Exception ex)
   {
      //context.Response.Redirect("/Errors/GeneralError.aspx");
      throw new HttpException(404, "Error Message");
   }
}

雖然它不起作用,但如果真的沒有頁面(在真正的 404 錯誤的情況下),我將被重定向到自定義 GeneralError.aspx。 在異常中不使用參數,如throw new HttpException(); 也沒有幫助。

為什么手動引發的錯誤不起作用,我該怎么辦? 任何幫助,將不勝感激。

編輯:下面我試過,也沒有幫助,說“可能暫時關閉,或者它可能已經永久移動到一個新的網址。”

 context.Response.Clear();
 context.Response.StatusCode = 404;
 context.Response.End();

在測試自定義消息時,您是在本地服務器上運行還是部署了應用程序?

如果您在本地運行RemoteOnly屬性是您的問題,因為它只向不在本地 Web 服務器上運行的用戶顯示自定義消息。 將其更改為On應該可以解決您的問題,如果發生任何錯誤,您將被重定向到您的"~/PageErrors/GeneralError.aspx"

編輯:啟用重定向: <customErrors mode="On" defaultRedirect="~/PageErrors/GeneralError.aspx" />

您可以使用Server.Transfer

Server.Transfer("~/PageErrors/GeneralError.aspx") 

它不會更改瀏覽器的地址欄。 因此,如果您不知道瀏覽器知道錯誤,效率會更高。

暫無
暫無

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

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