首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ASP.NET MVC中,我应该重定向到一个错误页面,还是只返回一个错误视图?

在ASP.NET MVC中,我应该重定向到一个错误页面,还是只返回一个错误视图?
EN

Stack Overflow用户
提问于 2011-11-18 18:08:22
回答 3查看 1.3K关注 0票数 2

当我问这个问题时,我主要考虑的是糟糕的参数。下列参数:

  • int <= 0
  • string为空或空白
  • 模型绑定对象缺少键属性。
  • "id未找到错误“(向操作传递”有效“整数id,但没有相应的数据库记录)

下面是我讨论的两种错误处理方案:

代码语言:javascript
复制
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();
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-18 18:39:26

有不同的场景,需要进行不同的处理:

  • 对于完全没有预料到的意外错误,我建议让异常气泡出现并在方法和/或asp.net自定义错误页中处理它
  • 对于预期的常见错误(如用户提供错误输入),应该返回视图并显示通过ModelState.Errors传递的错误。
  • 如果要通过AJAX / Javascript /作为服务调用该操作,则需要协调发送的内容。它可能是自定义的JSON对象,也可能是特定的视图。

根据你发布的信息,我无法将它们归类为“预期”或“未预期”。主要问题是,,这些调用的客户端期望如何处理它们?

票数 1
EN

Stack Overflow用户

发布于 2011-11-18 18:27:11

在RESTFul应用程序中,您应该返回视图并设置相应的HTTP状态代码(401、403、404、500、.)。当您重定向时,这意味着状态代码200和返回错误页的状态代码200没有意义。下面是我用来处理错误的技术。当您可以订阅不同的状态代码时,AJAX也能很好地工作。例如,假设您有一个经过身份验证的站点,登录用户可以在其中执行AJAX请求。在某些不活动之后,它们的会话可能过期,当它们需要执行一些AJAX请求时,如果服务器不返回正确的状态代码(在本例中为401),客户端脚本将很难理解和处理该场景。

票数 0
EN

Stack Overflow用户

发布于 2011-11-18 18:31:24

在ASP.NET中正确地做错误只不过是一场噩梦--非常困难。

如果你遵循网络的本意:

如果无法从错误中恢复,您应该返回错误结果,如400次错误请求、404资源未找到等。这包括4xx范围内的大部分错误。

对于将导致500错误的未处理异常的应用程序错误,正确的解决方案是发出302重定向到正确返回500状态代码的错误页。

正如@Darin所说,在RESTful应用程序中,您永远不应该对任何应该始终返回结果的东西发出重定向。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8186955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档