例如,我们有简单的操作方法来显示任何具有正确ID的书:
public ActionResult GetBook(int id) // id = 123456789
{
var book = dataManager.Books.GetBookById(id); // == null
logger.Info("Getting book with id " + book.Id);
return View(book);
}
如果id
参数无效,我们会收到500错误,因为没有带有该ID的图书。
如果我们需要抛出404错误,我们必须手动处理这种情况,如下所示:
if (book == null)
{
return HttpNotFound();
}
对于Web应用程序中的所有操作方法(自定义过滤器,请求管道),是否可以将500错误切换为404错误?
答案 0 :(得分:2)
从技术上讲,您可以通过安装错误处理程序,将任何500内部服务器错误重写为Application_Error()
中的404 Not Found,如ASP.NET MVC 5 error handling中所述。
但是,您似乎想让代码在NullReferenceException
中的book
上抛出book.Id
,并将该异常转换为404.
在这种情况下你真的不应该这样做,因为这会隐藏编程错误,因为你会错过无意中发生这种情况的例外情况。
所以:只需明确地执行此操作 期望null
。您展示的代码正是您所需要的:
if (book == null)
{
return HttpNotFound();
}
答案 1 :(得分:0)
我发现这有用Bulk 301 Redirect
我测试然后抛出302
try
{
------
}
catch
{
throw new HttpException(302, "not found");
}
在Global.asax中捕获异常并查找重定向csv文件
protected void Application_Error()
{
Exception exception = Server.GetLastError();
Response.Clear();
Server.ClearError();
HttpException ex = exception as HttpException;
if (ex.GetHttpCode() == 404 || ex.GetHttpCode() == 302 || ex.GetHttpCode() == 500)
{
Redirect code in the link!
}
}