1

我想在ASP.NET MVC 5中实现自定义错误页面。如果我输入无效的URL,自定义错误页面将显示我的自定义404大多数时候没有找到正确的响应“404未找到”的页面,但在某些情况下,它会响应我的自定义500内部服务器错误页面,响应为“500内部服务器错误”?为什么ASP.NET MVC有时会返回错误状态码500,有时错误状态码404

例如,我有以下的路由配置:

routes.MapRoute(
    null, 
    "Category/{category}", 
    new { controller = "Post", action = "Category" } 
); 

现在,如果我尝试导航到不存在的页面,它会回应404未找到错误,这是正确的。

justatestsite.com/Category/noexists(如下正确的路由配置,页面不存在,正确的错误状态404)

justatestsite.com/Category/noexists/norouteconfig(不遵循正确的路由配置,页面不存在,正确的错误状态404)

但是与我的其他路由配置:

routes.MapRoute(
    null, 
    "Archive/{year}/{month}/{day}/{title}", 
    new { controller = "Post", action = "Detail" } 
); 

justatestsite.com/archive/2014/8/25/noexists(如下正确的路由configuation ,页面不'牛逼存在,不正确的错误状态500)

justatestsite.com/archive/2014/8/25/noexists/norouteconfig(不按照正确的路由配置,页面不存在,正确的错误状态404)

这是帖子的细节控制器

public ViewResult Detail(int year, int month, int day, string title) 
{ 
    var post = repository.Detail(year, month, day, title); 

    if(post == null) 
    { 
     throw new HttpException(404, "Post not found"); 
    } 

    if (post.Published == false && User.Identity.IsAuthenticated == false) 
    { 
     throw new HttpException(401, "The post is not published"); 
    } 

    return View(post); 
} 

为什么有时错误状态码500响应?????

回答

2

想通了什么事情错了。我认为它与路由配置有关,但问题实际上是在我的LINQ表达式中。

我用

.Single() 

返回一个职位,所以必须有1周后返回,而不是0。当我去到没有帖子的网址时,有0个帖子,所以它会引发内部服务器错误,而不是找不到错误。

我改成了

.SingleOrDefault() 

这样的预期值可以是单一的(1)或默认值(0),现在它扔未找到404错误,这是我想要的。

+0

啊,是的,旧的Single/First'OrDefault'栗子;) – 2014-09-03 12:55:51

1

你得到一个500内部服务器错误,因为有一个在PostController什么是你得到的实际错误消息Detail操作中的问题,你的行为是什么样子的?

您如何处理您无法找到相关帖子的事实?我猜想你没有得到任何回应,然后摔倒。

你有没有尝试过这样的:

public ActionResult Post(int year, int month, int day, string path) 
{ 
    var publishedDate = new DateTime(year, month, day); 

    BlogPost blog = _BlogRepository.GetBlogPost(publishedDate, path); 

    if (null == blog) 
    { 
    throw new HttpException(404, "Blog post not found"); 
    } 

    return View(blog); 
} 
+0

不知道我以前的答复去了哪里......我用我的控制器编辑了我的问题,它与您的 – Mindless 2014-09-03 04:34:56

+0

好奇。你有没有附加一个调试器,并证明你实际着陆在正确的行动?错误消息中的详细信息是什么? – 2014-09-03 06:51:21

+1

谢谢,经过调试,我发现问题实际上是在我的LINQ表达式中,问题已修复 – Mindless 2014-09-03 08:54:07

相关问题