gpt4 book ai didi

asp.net-mvc - 如何在ASP.NET MVC中实现自己的错误 View

转载 作者:行者123 更新时间:2023-12-03 07:45:29 24 4
gpt4 key购买 nike

在我的ASP.NET MVC应用程序中,我有一个ErrorController,当前只有一个操作方法,该方法接收一个名为Error的自定义类并将其呈现到名为Error.cshtml的 View 中。目前,Error类中只有2个属性:

public class Error{
public string UserFriendlyMmessage{get;set;}
public string ErrorMessage{get;set;}
}

Error.cshtml View 强烈地键入到Error类。每当在操作方法内引发异常时,我将执行以下操作:
Error error = new Error { UserFriendlyText = "The friendly message", ErrorDescription = "Error to be logged" };
return RedirectToAction("Index", "Error", new System.Web.Routing.RouteValueDictionary(error));

这是ErrorController的操作方法:
    public ActionResult Index(Error error)
{
return View(model: error, viewName:"Error");
}

尽管这很好用,但是所有模型属性都以这种方式显示在url中。有没有更好,更常用的方法?

最佳答案

除了难看的查询字符串外,您还有可能超出查询字符串的限制,特别是如果您的消息很长并且您在Error中添加了更多属性时,您就有风险。

一种选择是将Error保留为TempData属性,然后return RedirectToAction("Index", "Error")并在Index()方法中从TempData获取值并呈现 View 。

另一种选择是使用HandleErrorAttribute属性根据特定异常渲染 View 。例如

[HandleError(ExceptionType = typeof(MyException), View = "MyError")]
[HandleError(ExceptionType = typeof(AnotherException), View = "AnotherError")]
public class BaseController : Controller
{
}

并在 /Views/Shared文件夹中,添加特定的错误 View (MyError.cshtml)
@model System.Web.Mvc.HandleErrorInfo
....
@Model.Exception.Message // display error message
...

注意 HandleErrorInfo使您可以访问 Controller 和操作名称以及异常详细信息。

然后,在特定方法中,如果引发异常,则将显示关联的 View
public class MyController : BaseController
{
public ActionResult SomeAction()
{
if(someCondition)
{
throw new MyException("Some friendly error message");
}
return View();
}
}

其中 MyException是一个内置异常,或者您拥有从 Exception派生的自定义异常

请注意,您还需要在 web.config中设置以下内容
<system.web>
<customErrors mode="On" defaultRedirect="Error" />
</system.web>

关于asp.net-mvc - 如何在ASP.NET MVC中实现自己的错误 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27422573/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com