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请求时,如果您的
在RESTFul应用程序中,您应该返回视图并设置相应的HTTP状态代码(401403404500,…)。当您重定向时,这意味着状态代码200和返回错误页面的状态代码200没有意义。下面是一个我用来处理错误的方法。当您可以订阅不同的状态代码时,这也可以很好地与AJAX配合使用。例如,假设您有一个经过身份验证的站点,登录的用户可以在其中执行AJAX请求。在某些不活动之后,他们的会话可能会过期,并且当他们需要执行一些AJAX请求时,如果您的服务器没有返回正确的状态代码(在本例中为401),客户端脚本将很难理解和处理该场景。在ASP.NET中正确地执行错误简直是噩梦般的困难 如果您遵循web的意图: 对于任何无法从错误中恢复的错误,如400错误请求、404未找到资源等,您应该返回错误结果。这包括4xx范围内的大多数错误 对于将导致500错误的未处理异常的应用程序错误,正确的解决方案是向正确返回500状态代码的错误页面发出302重定向int
正如@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(); }