为了让页面返回404错误,我尝试了以下两种方法:
public ActionResult Index()
{
return new HttpStatusCodeResult(404);
}
public ActionResult NotFound()
{
return HttpNotFound();
}但它们都只是呈现了一个空白页面。如何在ASP.NET MVC3中手动返回404错误?
发布于 2011-06-08 15:06:55
如果您使用fiddler检查响应,我相信您会发现空白页面实际上返回了404状态代码。问题是没有呈现视图,因此没有显示空白页面。
你可以通过在你的web.config中添加一个customErrors元素来显示一个实际的视图,当某个状态码出现时,它会将用户重定向到一个特定的url,然后你就可以像处理任何url一样来处理它了。下面是一个演示:
首先,在适用的情况下抛出HttpException。实例化异常时,请确保使用其中一个重载,该重载将http状态代码作为参数,如下所示。
throw new HttpException(404, "NotFound");然后在您的web.config文件中添加一个自定义的错误处理程序,这样您就可以确定在发生上述异常时应该呈现哪个视图。下面是一个例子:
<configuration>
<system.web>
<customErrors mode="On">
<error statusCode="404" redirect="~/404"/>
</customErrors>
</system.web>
</configuration>现在,在您的Global.asax中添加一个路由条目,它将处理url " 404“,它将把请求传递给一个控制器的操作,该操作将显示您的404页面的视图。
Global.asax
routes.MapRoute(
"404",
"404",
new { controller = "Commons", action = "HttpStatus404" }
);CommonsController
public ActionResult HttpStatus404()
{
return View();
}剩下的工作就是为上面的操作添加一个视图。
以上方法的一个警告:根据“C# 2010中的专业版IIS4”这本书(Apress),如果你使用的是IIS7,那么customErrors的使用是过时的。相反,你应该使用httpErrors部分。下面是这本书中的一句话:
,但尽管此设置仍然适用于Visual Studio的内置测试web服务器,但它实际上已被IIS7.x.
中的<httpErrors>部分所取代
发布于 2011-04-12 20:27:46
我成功地使用了这个:
return new HttpNotFoundResult();发布于 2011-04-12 20:51:08
带custom error handler的throw new HttpException(404, "NotFound");对我来说没问题。
https://stackoverflow.com/questions/5635114
复制相似问题