日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

MVC 错误处理1

發布時間:2024/6/18 c/c++ 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MVC 错误处理1 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

實例1.

/// <summary>/// 錯誤處理/// 404 處理/// </summary>protected void Application_Error(object sender, EventArgs e){//判斷請求方式if (Request.HttpMethod == "GET"){// 獲取錯誤HttpException exception = Server.GetLastError() as HttpException;if (exception != null){if (exception.GetHttpCode() == 404){//輸出指定的字符串 Response.Clear();//Response.Write("code:404");//輸出指定controller下的內容RouteData routeData = new RouteData();routeData.Values.Add("controller", "ViewOne");routeData.Values.Add("action", "TempTwo");routeData.Values.Add("name", "zhangsan");IController one = new ViewOneController();one.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));/** 如果不指定 結束輸出的話,則還是會執行框架的自動處理(會清空自己輸出的內容)* 如果指定結束的話,狀態碼是200,而不是400,所以需要自己手動指定狀態碼*/Response.StatusCode = 404;Response.End();Context.ClearError();}}}}

?

實例2.

MVC中,有一個Filter可以捕捉錯誤,但是它的用法是利用Attribute來實現的,而且只能加在Controller和Action上,所以不能捕捉別出的錯誤

其實理論上所有的錯誤肯定產生于Controller中,但有2種情況下,就不會被捕捉了

1、頁面不存在的時候,找不到對應的Controller,那沒有任何Controller被執行,所以自然也不會捕捉到錯誤了

2、在 IAuthorizationFilter 下發生錯誤的時候,錯誤捕捉代碼在IExceptionFilter中,而IAuthorizationFilter的優先權高于IExceptionFilter,所以也就捕捉不到了

protected void Application_Error(object sender, EventArgs e) { Exception exception = Server.GetLastError(); Response.Clear(); HttpException httpException = exception as HttpException; RouteData routeData = new RouteData(); routeData.Values.Add("controller", "Error"); if (httpException == null) { routeData.Values.Add("action", "Index"); } else //It's an Http Exception, Let's handle it. { switch (httpException.GetHttpCode()) { case 404: // Page not found. routeData.Values.Add("action", "HttpError404"); break; case 500: // Server error. routeData.Values.Add("action", "HttpError500"); break; // Here you can handle Views to other error codes. // I choose a General error template default: routeData.Values.Add("action", "General"); break; } } // Pass exception details to the target error View. routeData.Values.Add("error", exception.Message); // Clear the error on server. Server.ClearError(); // Call target Controller and pass the routeData. IController errorController = new WEB.Controllers.ErrorController(); errorController.Execute(new RequestContext(new HttpContextWrapper(Context), routeData)); }

?

把這段代碼放到 Global.asax 中,并且新建一個 Controller 叫做 Error

namespace MVC.Controllers { public class ErrorController : Controller { public ActionResult Index(string error) { ViewData["Title"] = "WebSite 網站內部錯誤"; ViewData["Description"] = error; return View("Index"); } public ActionResult HttpError404(string error) { ViewData["Title"] = "HTTP 404- 無法找到文件"; ViewData["Description"] = error; return View("Index"); } public ActionResult HttpError500(string error) { ViewData["Title"] = "HTTP 500 - 內部服務器錯誤"; ViewData["Description"] = error; return View("Index"); } public ActionResult General(string error) { ViewData["Title"] = "HTTP 發生錯誤"; ViewData["Description"] = error; return View("Index"); } } } 這樣,就可以捕捉所有錯誤了。

但其實,這樣也不是完美的,因為如果你參考了我第一個問題中,在IIS6下不修改IIS設置,運行了MVC,那當后綴名不是.aspx的時候,錯誤不會被捕捉

因為這時候輸入的地址根本沒有交給網站來處理,IIS直接拋出了錯誤,因為IIS認為這個后綴名不是你所能執行

?

?

特別標注:

webconfig 需要配置輸出404的錯誤的詳細信息

<system.webServer> <httpErrors errorMode="Detailed" /> </system.webServer>

?

轉載于:https://www.cnblogs.com/tianma3798/p/4305207.html

總結

以上是生活随笔為你收集整理的MVC 错误处理1的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。