返回 404 错误 ASP.NET MVC 3 [英] Returning 404 Error ASP.NET MVC 3

查看:40
本文介绍了返回 404 错误 ASP.NET MVC 3的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

为了让页面返回 404 错误,我尝试了以下 2 件事:

public ActionResult Index(){返回新的 HttpStatusCodeResult(404);}公共 ActionResult NotFound(){返回 HttpNotFound();}

但它们都只呈现一个空白页面.如何从 ASP.NET MVC 3 中手动返回 404 错误?

解决方案

如果您使用 fiddler 检查响应,我相信您会发现空白页实际上返回的是 404 状态代码.问题是没有渲染视图,因此是空白页面.

您可以通过将 customErrors 元素添加到您的 web.config 来获得要显示的实际视图,该元素将在出现特定状态代码时将用户重定向到特定 url,然后您可以像处理任何 url 一样进行处理.下面是一个演练:

首先在适用的情况下抛出 HttpException.实例化异常时,请务必使用其中一种将 http 状态代码作为参数的重载,如下所示.

throw new HttpException(404, "NotFound");

然后在您的 web.config 文件中添加自定义错误处理程序,以便您可以确定发生上述异常时应呈现的视图.下面是一个例子:

<预><代码><配置><system.web><customErrors mode="开启"><error statusCode="404" redirect="~/404"/></customErrors></system.web></配置>

现在在您的 Global.asax 中添加一个路由条目,该条目将处理 url404",它将请求传递给控制器​​的操作,该操作将显示您的 404 页面的视图.

Global.asax

routes.MapRoute("404","404",新{控制器=公共",动作=HttpStatus404"});

公共控制器

public ActionResult HttpStatus404(){返回视图();}

剩下的就是为上述操作添加一个视图.

上述方法的一个警告:根据Pro ASP.NET 4 in C# 2010"一书(Apress)使用 customErrors 已过时.您应该使用 httpErrors 部分.这是书中的引述:

<块引用>

虽然这个设置仍然适用于 Visual Studio 的内置测试网站服务器,它实际上已被 IIS 7.x 中的 部分取代.

I have tried the following 2 things to have a page return a 404 error:

public ActionResult Index()
{
    return new HttpStatusCodeResult(404);
}

public ActionResult NotFound()
{
    return HttpNotFound();
}

but both of them just render a blank page. How can I manually return a 404 error from within ASP.NET MVC 3?

解决方案

If you inspect the response using fiddler, I believe you'll find that the blank page is in fact returning a 404 status code. The problem is no view is being rendered and thus the blank page.

You could get an actual view to be displayed instead by adding a customErrors element to your web.config that will redirect the user to a specific url when a certain status code occurs which you can then handle as you would with any url. Here's a walk-through below:

First throw the HttpException where applicable. When instantiating the exception, be sure to use one of the overloads which takes a http status code as a parameter like below.

throw new HttpException(404, "NotFound");

Then add an custom error handler in your web.config file so that you could determine what view should be rendered when the above exception occurs. Here's an example below:

<configuration>
    <system.web>
        <customErrors mode="On">
          <error statusCode="404" redirect="~/404"/>
        </customErrors>
    </system.web>
</configuration>

Now add a route entry in your Global.asax that'll handle the url "404" which will pass the request to a controller's action that'll display the View for your 404 page.

Global.asax

routes.MapRoute(
    "404", 
    "404", 
    new { controller = "Commons", action = "HttpStatus404" }
);

CommonsController

public ActionResult HttpStatus404()
{
    return View();
}

All that's left is to add a view for the above action.

One caveat with the above method: according to the book "Pro ASP.NET 4 in C# 2010" (Apress) the use of customErrors is outdated if you're using IIS 7. Instead you should use the httpErrors section. Here's a quote from the book:

But although this setting still works with Visual Studio’s built-in test web server, it’s effectively been replaced by the <httpErrors> section in IIS 7.x.

这篇关于返回 404 错误 ASP.NET MVC 3的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆