当我问这个问题时,我主要是考虑不好的参数。参数where:
int
< = 0 string
为空或空格以下是我正在谈论的两个错误处理方案:
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();
}
答案 0 :(得分:1)
有不同的情况需要区别对待:
Controller.OnException(...)
method和/或asp.net custom error pages 根据您发布的内容,我无法对他们“预期”或“未预料到”的天气进行分类。主要问题是,这些调用的客户端如何处理它们?
答案 1 :(得分:0)
在RESTFul应用程序中,您应该返回视图并设置相应的HTTP状态代码(401,403,404,500,...)。重定向时,这意味着状态代码200并返回错误页面的状态代码200没有意义。这是我用来处理错误的technique。当您可以订阅不同的状态代码时,这也非常适合AJAX。例如,假设您有一个经过身份验证的站点,其中登录的用户可以执行AJAX请求。在某些不活动之后,如果您的服务器没有返回正确的状态代码(在这种情况下为401),则会话可能会过期,并且当他们需要执行某些AJAX请求时,客户端脚本将很难理解和处理该方案。
答案 2 :(得分:0)
在ASP.NET中正确地做错误只是噩梦般的困难。
如果您遵循网络的目的:
您应该返回任何无法从错误中恢复的错误结果,例如400错误请求,404资源未找到等。这包括4xx范围内的大多数错误。
对于将导致500错误的未处理异常的应用程序错误,正确的解决方案是向错误页面发出302重定向,以正确返回500状态代码。
正如@Darin Dimitrov所说,在RESTful应用程序中,你永远不应该发出任何应该总能最终返回结果的重定向。