Asp.net mvc 在Asp.net MVC中引发/返回404 actionresult或异常并让IIS处理

Asp.net mvc 在Asp.net MVC中引发/返回404 actionresult或异常并让IIS处理,asp.net-mvc,http,iis-7,Asp.net Mvc,Http,Iis 7,如何从我的操作中抛出404或FileNotFound异常/结果,并让IIS使用我的customErrors配置部分显示404页面 我已经这样定义了我的自定义错误 <customErrors mode="On" defaultRedirect="/trouble"> <error statusCode="404" redirect="/notfound" /> </customErrors> 但这只是显示一个空白页,而不是“我的/找不到的”页 :( 我该怎

如何从我的操作中抛出404或FileNotFound异常/结果,并让IIS使用我的customErrors配置部分显示404页面

我已经这样定义了我的自定义错误

<customErrors mode="On" defaultRedirect="/trouble">
  <error statusCode="404" redirect="/notfound" />
</customErrors>
但这只是显示一个空白页,而不是“我的/找不到的”页

:(


我该怎么办?

ASP.NET MVC 3引入了操作结果,该结果应优先用于手动抛出带有http状态代码的异常。 这也可以通过控制器上的方法返回:

public ActionResult MyControllerAction()
{
   ...

   if (someNotFoundCondition)
   {
       return HttpNotFound();
   }
}
在MVC 3之前,您必须执行以下操作:

throw new HttpException(404, "HTTP/1.1 404 Not Found");

这也会有所帮助


您可以调用Controller.HttpNotFound


必须将其降级,因为不应手动执行此操作。请使用另一个答案中所示的HttpNotFound控制器方法。正确-但HttpNotFound是在ASP.NET MVC 3中引入的。此问题(和我的答案)早于此,在早期版本中是一种合适的方法。我现在编辑了我的答案,以说明MVC3中首选的较新方法。此外,有时抛出异常仍然是合理的,例如,当您想要为action参数创建一个简短、无效且可重用的空检查方法时。实际上,这两种方法都得到了支持我发现抛出
HttpException
对于提供可重用的断言方法特别有用,比如
var m=RequireValidModel(id)
其中,
RequireValidModel
在很多地方都被使用,其目的是声明只应返回有效的模型,否则会向任何调用方抛出异常。此外,您可以在此处通过强制转换为
int
来利用
HttpStatusCode
,如下所示:
抛出新的HttpException((int)HttpStatusCode.BadRequest,“无效id”)
FYI此链接不再有效,应删除。@BoykoKaradzhov haha:)已修复!
throw new HttpException(404, "HTTP/1.1 404 Not Found");
if (model == null)
{
    return HttpNotFound();
}