如果找不到动态内容,则正确将用户发送到404页面(ASP.NET MVC)

16 浏览
0 Comments

如果找不到动态内容,则正确将用户发送到404页面(ASP.NET MVC)

我已经在ASP.NET MVC 3中为一般情况下的404处理实现了功能,用于在找不到控制器/视图时使用。但是,如果用户试图访问找不到的内容,应该如何在控制器内处理呢?例如,www.foo.bar/Games/Details/randomjunk将在GamesController中调用以下代码:

public ActionResult Details(string id) // id为'randomjunk'
{
  if(DoesGameExist(id) == false)
    // 现在怎么办?

我可以简单地使用return Redirect('/Errors/Http404');,但这似乎不是正确的方法。应该抛出异常,还是使用其他方法?

我们可以在这种情况下拥有一个特殊的视图,但首先我们需要找到一种适用于多种情况的好方法。

编辑:我想显示我已经为一般情况下准备好的友好的404页面。

0
0 Comments

在ASP.NET MVC中,有时候会遇到动态内容未找到的情况。在这种情况下,我们希望能够正确地将用户导向404页面。下面是解决这个问题的原因和方法。

出现这个问题的原因是当动态内容未找到时,系统需要正确地处理这个错误并将用户导向404页面。如果不正确处理,用户可能会看到未处理的错误信息,这不仅影响用户体验,还可能暴露系统的敏感信息。

解决这个问题的方法是使用HttpException 404来抛出一个404错误。具体代码如下:

throw new HttpException(404, "Page not Found");

这段代码会实现我们想要的效果!用户最终会被导向'/Errors/Http404?aspxerrorpath=/Games/Details/randomjunk',并且会看到一个友好的错误页面。同时,这个错误也会被记录在服务器端。这样一来,我们既能保证用户体验,又能及时发现和处理错误信息。

0
0 Comments

问题的原因是如果动态内容未找到,应该正确地将用户发送到404页面。解决方法是在ASP.NET MVC中使用HttpException来引发404错误,并在Web.config文件中配置customErrors来将404重定向到自定义的错误页面。以下是整理后的文章:

编辑:

根据Darin Dimitrov的回答,即使使用customErrors,我之前的方法也不起作用。正如Antonio Bakula在另一个答案中所说,你必须这样做:

throw new HttpException(404, "Not found");

然后customErrors就会起作用了。

有一个名为HttpNotFound的内置辅助方法,所以你可以这样做:

return HttpNotFound();

你还可以使用HttpStatusCodeResult显式返回404:

return new HttpStatusCodeResult(404);

当没有特定的辅助方法或类可用于所需的状态码时,HttpStatusCodeResult非常有用。

你还应该在Web.config中添加以下内容:


    

你还可以为其他状态码添加额外的行,并设置defaultRedirect。

是的,我尝试过这个,但是这样会给用户返回一个404页面,而不是一个带有错误信息的正确网页。例如,当在Chrome中尝试时,Chrome会显示“糟糕!此链接似乎损坏。”而不是显示我友好的“找不到该页面,抱歉”的消息。

Philip,你还需要在Web.config中进行配置。我会找到确切的XML。

这个吗?


    

或者,你可以抛出一个带有404代码的HttpException,但是这种方法似乎更清晰。

这就是我拥有的,但是我仍然没有得到友好的页面,只有浏览器自己的页面。

Philip,你使用的是IIS 7吗?如果是的话,请尝试这个问题。

是的,我使用的是IIS 7,但它没有显示一般的IIS错误消息,而是实际给用户返回了404状态码。我希望显示我的“页面未找到”页面,即用户从该页面获得200状态码。像另一个答案建议的那样,抛出异常的方法正好符合我的要求。它是否应该与你的答案做同样的事情?

0
0 Comments

当动态内容未找到时,正确地将用户重定向到404页面是一个常见的需求。在ASP.NET MVC中,可以通过返回一个HttpStatusCodeResult对象来实现这一点。

以下是解决该问题的原因和方法:

原因:

当动态内容未找到时,如果不做处理,通常会出现默认的错误页面,这可能会给用户带来困惑,并且无法提供清晰的错误信息。为了改善用户体验,我们希望显示一个自定义的404页面,向用户说明无法找到所请求的内容。

解决方法:

在ASP.NET MVC中,我们可以返回一个HttpStatusCodeResult对象,将状态码设置为404,从而正确地将用户重定向到404页面。

代码示例:

return new HttpStatusCodeResult(404);

这样,当动态内容未找到时,将向访问者发送一个404 Http结果,使浏览器显示自己的“页面未找到”,而不是网站处理并显示一个适当的品牌化的“抱歉,我们无法找到您要查找的内容”的页面。

通过使用上述解决方法,我们可以提供更好的用户体验,同时确保网站的可访问性和可维护性。

0