【问题标题】: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")。我相信有人会给出一个非常深入的答案。

标签: c# asp.net-mvc-4 error-handling


【解决方案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 中的错误处理

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-30
        • 2016-06-06
        • 1970-01-01
        • 2012-08-03
        • 1970-01-01
        • 2011-05-30
        • 1970-01-01
        相关资源
        最近更新 更多