Mik*_*yev 1 error-handling asp.net-mvc
在我的ASP.NET MVC应用程序中,我有一个ErrorController,目前只有一个动作方法接收一个名为Error的自定义类,并将其呈现给名为Error.cshtml的视图.目前,Error类中只有2个属性:
public class Error{
public string UserFriendlyMmessage{get;set;}
public string ErrorMessage{get;set;}
}
Run Code Online (Sandbox Code Playgroud)
Error.cshtml视图强类型为Error类.每当在action方法中抛出异常时,我都会执行以下操作:
Error error = new Error { UserFriendlyText = "The friendly message", ErrorDescription = "Error to be logged" };
return RedirectToAction("Index", "Error", new System.Web.Routing.RouteValueDictionary(error));
Run Code Online (Sandbox Code Playgroud)
这是ErrorController的action方法:
public ActionResult Index(Error error)
{
return View(model: error, viewName:"Error");
}
Run Code Online (Sandbox Code Playgroud)
虽然这很好用,但这样所有的模型属性都显示在url中.有没有更好,更常用的方法呢?
小智 5
除了丑陋的查询字符串之外,您还有可能超出查询字符串限制,特别是如果您的消息很长并且您要添加更多属性Error.
一种选择是将属性保存Error到TempData属性,然后return RedirectToAction("Index", "Error")在Index()方法中获取值TempData并呈现视图.
另一种选择是使用HandleErrorAttribute属性根据特定异常呈现视图.例如
[HandleError(ExceptionType = typeof(MyException), View = "MyError")]
[HandleError(ExceptionType = typeof(AnotherException), View = "AnotherError")]
public class BaseController : Controller
{
}
Run Code Online (Sandbox Code Playgroud)
并在/Views/Shared文件夹中添加特定的错误视图(MyError.cshtml)
@model System.Web.Mvc.HandleErrorInfo
....
@Model.Exception.Message // display error message
...
Run Code Online (Sandbox Code Playgroud)
注意HandleErrorInfo使您可以访问控制器和操作名称以及异常详细信息.
然后,在特定方法中,如果抛出异常,将显示关联的视图
public class MyController : BaseController
{
public ActionResult SomeAction()
{
if(someCondition)
{
throw new MyException("Some friendly error message");
}
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
MyException内置异常在哪里,或者您拥有源自的自定义异常Exception
请注意,您还需要设置以下内容 web.config
<system.web>
<customErrors mode="On" defaultRedirect="Error" />
</system.web>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1838 次 |
| 最近记录: |