很無聊的記錄下。首先IIS 7以上的版本測試才成功
首先
//全局ErrorHandler public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); filters.Add(new VcodeFilterAttribute()); }
然后MVC web.config 設置如下
<!-- 放到system.webServer -->
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="404"/>
<remove statusCode="500"/>
<error statusCode="404" path="/Error/Error404" responseMode="ExecuteURL"/>
<error statusCode="500" path="/Error/Error500" responseMode="ExecuteURL"/>
</httpErrors>
確保它是關閉的。
<customErrors mode="Off" />
然后有個ErrorController。
public class ErrorController : Controller { public ActionResult Error404() { return View(); } public ActionResult Error500() { return View(); } }
View 中,喜歡怎么寫就怎么寫。當然要設置一下StatusCode,否則全部返回200
@{ Response.StatusCode = 404;}
當然也可以在controller里面設置
日志可以寫在global里面
protected void Application_Error(object sender, EventArgs e) { var exception = Server.GetLastError(); //log exception }
