c# - 在 ASP.NET MVC 中,我应该重定向到错误页面还是只返回错误 View ?

标签 c# asp.net asp.net-mvc-3 error-handling

当我问这个问题时,我主要是在考虑错误的参数。参数,其中:

  • int <= 0
  • string 为空或空格
  • 模型绑定(bind)对象缺少关键属性
  • id not found errors”(一个“有效”的整数 id 被传递给操作,但是没有相应的数据库记录)

这是我正在谈论的两种错误处理场景:

public ActionResult GoToError(int value, string name)
{
    if (value <= 0 || string.IsNullOrWhiteSpace(name))
    {
        // Parameter(s) not meeting basic conditions
        TempData["ErrorMessage"] = "Invalid parameters";
        return RedirectToAction("Index", "Error");
    }

    return View();
}

public ActionResult ReturnView(int value, string name)
{
    if (value <= 0 || string.IsNullOrWhiteSpace(name))
    {
        // Parameter(s) not meeting basic conditions
        ViewData["ErrorMessage"] = "Invalid parameters";
        return View("Error");
    }

    return View();
}

最佳答案

有不同的场景,需要以不同的方式处理:

  • 对于您没有预料到的完全意外错误,我建议让异常冒泡并在 Controller.OnException(...) method 中处理它和/或 asp.net custom error pages
  • 对于常见的预期错误,例如用户提供错误输入,返回 View 并显示通过 ModelState.Errors 传递的错误是正确的
  • 如果该操作旨在通过 AJAX/Javascript/作为服务调用,您需要协调发回的内容。它可以是自定义 JSON 对象或特定 View 。

根据您发布的内容,我无法将天气分类为“预期”或“意外”。主要问题是,这些调用的客户希望如何处理它们?

关于c# - 在 ASP.NET MVC 中,我应该重定向到错误页面还是只返回错误 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8186955/

相关文章:

ASP.NET Viewstate - 寻求有关支持文章的澄清

c# - 即使属性已设置且有效,为什么 TryUpdateModel 仍返回 false?

c# - 如何在异常后清除 NHibernate 缓存

c# - 通过 C# 更改 Cassandra 表的正确方法

asp.net - 如何将 ASP.NET 中继器控件绑定(bind)到 IList<String>?

asp.net-mvc-3 - 在 mvc3 中组织 View 模型的更好方法?

asp.net-mvc - 在 ASP.NET mvc 中使用 Session 变量仍然可以,或者对于某些东西(比如购物车)有更好的选择吗

c# - 使用松耦合 WCF Web 服务的 ASP.NET MVC

c# - 在 IDL 库中包含 C# 接口(interface)

javascript - 使用 CSS 格式化下拉列表