2012-02-13 79 views
0

我有這樣一個控制器的動作處理:與未處理HttpException

public ActionResult Index(string url) 
{ 
    var pageTitle = url.Split('/')[0]; 
    var page = Services.PageService.GetPage(pageTitle); 

    if (page == null) 
    { 
     throw new HttpException((Int32) HttpStatusCode.NotFound, "NotFound"); 
    } 

     return View(page); 
} 

每次我調試我的網站,當HttpException拋出我從Visual Studio中的提示,通知我,這個例外是由用戶未處理碼。

我想我只是想讓某人澄清我所做的事是正確的,而且這個通知可以不用擔心而被解僱。事件仍然會影響到我的Global.asax文件中的Application_Error方法,因爲我實際上正在處理HttpException,所以據我所知,唯一的問題是VS每次拋出此異常時都告訴我不方便。

+0

對我來說,看起來是正確的,請參閱http://www.tugberkugurlu.com/archive/asp-net-mvc---throwing-404-exceptions-manually-from-controller-when-model-is-null – 2012-02-13 09:40:56

回答

0

我想我只是希望有人澄清我正在做的是 是正確的,而且這個通知可以不用擔心被解僱。

是的,你所看到的是所謂的first chance exception。 VS調試器會通知您代碼中發生的所有異常。如果你有這個異常的適當的處理程序,你應該沒問題。

+0

再次感謝Darin,感謝你的快速回答,它壓扁了我的任何擔憂。 – Chris 2012-02-13 09:44:30

-1

我假設你想要將http代碼(本例中爲404)返回給你的頁面的用戶/消費者。所以,你應該寧可這樣做:

public ActionResult Index(string url) 
{ 
    var pageTitle = url.Split('/')[0]; 
    var page = Services.PageService.GetPage(pageTitle); 

    if (page == null) 
    { 
     return new HttpNotFoundResult(); 
    } 
     return View(page); 
} 

HttpNotFoundResult是在asp.net-MVC3新的ActionResult,還有一個受保護的方法HttpNotFound()作爲控制器類做同樣的事情的一部分。在這兩種情況下,您還可以提供消息字符串。

unit-testing的角度來看,返回ActionResult也更優美。

+0

HttpNotFoundResult不會呈現視圖。它只是將狀態碼設置爲404並返回一個空的結果。有關詳細信息,請參閱[本文](http://stackoverflow.com/questions/4985550/how-to-return-a-view-for-httpnotfound-in-asp-net-mvc-3)。 – jbaum012 2014-09-02 15:53:55

+0

@ jbaum012我不確定答案到底是什麼問題。 OP(大約兩年前)要求不要渲染視圖,而是要求不要讓視覺工作室中斷。即使在你鏈接的答案中指定了同樣的事情,只是另外規定你必須指定404將返回的HTML。在我看來,這是一個單獨的事情。 OP也只是想確認他懷疑這個例外是一個健康檢查。我現在可以從中看出這一點。 – gideon 2014-09-02 16:02:14

+0

我不想冒犯,但我只是發現你的解決方案誤導。 HttpNotFoundResult不是拋出新的HttpException的合適替代方法。舉個例子,如果你要在web.config中指定一個自定義的錯誤頁面,'return new HttpNotFoundResult'不會**顯示你的自定義錯誤頁面。 – jbaum012 2014-09-02 16:22:55