C# 在ASP.NET MVC中,我应该重定向到错误页面还是简单地返回错误视图?

C# 在ASP.NET MVC中,我应该重定向到错误页面还是简单地返回错误视图?,c#,asp.net,asp.net-mvc-3,error-handling,C#,Asp.net,Asp.net Mvc 3,Error Handling,当我问这个问题时,我主要考虑的是坏参数。参数,其中: int在RESTFul应用程序中,您应该返回视图并设置相应的HTTP状态代码(401403404500,…)。当您重定向时,这意味着状态代码200和返回错误页面的状态代码200没有意义。下面是一个我用来处理错误的方法。当您可以订阅不同的状态代码时,这也可以很好地与AJAX配合使用。例如,假设您有一个经过身份验证的站点,登录的用户可以在其中执行AJAX请求。在某些不活动之后,他们的会话可能会过期,并且当他们需要执行一些AJAX请求时,如果您的

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


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

    在ASP.NET中正确地执行错误简直是噩梦般的困难

    如果您遵循web的意图:

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

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


    正如@Darin Dimitrov所说,在RESTful应用程序中,您永远不应该对任何内容发出重定向,它应该始终明确地返回结果。

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

    • 对于完全出乎意料的错误,我建议让异常冒泡出来,在和/或中处理它
    • 对于预期的常见错误,例如用户提供错误输入,返回视图并显示传递的错误是正确的
    • 如果要通过AJAX/Javascript/作为服务调用动作,则需要协调返回的内容。它可以是自定义JSON对象或特定视图
    根据您发布的内容,我无法将他们分为“预期”还是“意外”。主要问题是,这些电话的客户希望如何处理他们?

    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();
    }