在 asp.net mvc 中返回错误的最佳实践是啥

Posted

技术标签:

【中文标题】在 asp.net mvc 中返回错误的最佳实践是啥【英文标题】:what is the best practice for returning a error in asp.net mvc在 asp.net mvc 中返回错误的最佳实践是什么 【发布时间】:2015-07-05 22:29:45 【问题描述】:

这是我的动作方法

var model= db.PageData.FirstOrDefault();
if (model==null)

    //return Error


reutrn View(model);

返回此错误的最佳做法是什么?以一种用户友好的方式,并且在发生此错误时我可以识别它。

【问题讨论】:

我会创建一个错误页面并调用 RedirectToAction("MyError", "ErrorController")。我相信有人会给出一个非常深入的答案。 可能重复:***.com/questions/10732644/… 【参考方案1】:

Throw a 500 Error:

return new HttpStatusCodeResult(500);

然后在您的 web.config 中处理 500 个错误。

http://benfoster.io/blog/aspnet-mvc-custom-error-pages

【讨论】:

【参考方案2】:

我会创建一个错误视图,然后如果您预计会出现错误,请执行以下操作:

if(model == null)

    ViewBag.Error = "Your x is not present, please try again later or contact xxx";
    return View("Error");

在您的错误视图中,只需检查ViewBag.Error 是否存在。 (错误视图应该在共享视图中)。

请注意,我只会在您排除它发生时才这样做,然后您可以告知用户他们做错了什么。例如编辑某些内容,您可以将这个视图返回给他们,并为他们提供更多关于他们做错了什么的信息。

【讨论】:

【参考方案3】:
if(model == null)

    TempData["Error"] = "Your x is not present, please try again later or contact 

    return View();

在您的cshtml页面上,您可以检查临时数据是否包含“错误条目”,您可以显示您的用户详细信息。

@if (TempData["Error"] != null)

    <div class="error">
    @TempData["Error"].ToString
    </div>

【讨论】:

我不会在这个例子中使用 TempData,因为 tempdata 链接到会话并且很容易被销毁。可能是小消息,但如果您需要向用户提供任何重要的信息,那么只需按 F5 即可。但我想每个人都有自己的喜好。 是的,你说得对。 TempData 的生命周期很短。我想展示将详细信息传递到同一页面的简单方法【参考方案4】:

MVC 中的全局错误处理

public class MvcApplication : System.Web.HttpApplication

    protected void Application_Error(object sender, EventArgs e)
    
        Exception exception = Server.GetLastError();
        Server.ClearError();
        Response.Redirect("/Home/Error");
    

see here 用于 asp.net mvc 中的错误处理

【讨论】:

以上是关于在 asp.net mvc 中返回错误的最佳实践是啥的主要内容,如果未能解决你的问题,请参考以下文章

在 ASP.NET MVC 中返回最大 Json 结果的最佳方法

在 ASP.NET MVC 中使用 Tempdata - 最佳实践

ASP.NET MVC 4,EF5,模型中的唯一属性 - 最佳实践?

asp.net mvc 开发人员的 javascript 最佳实践

在 Linux 上部署 ASP.NET MVC:最佳实践、工具和惊喜

asp.net mvc 站点的安全最佳实践?