Asp.net mvc 为什么ASP.NET MVC有时返回错误状态代码500,有时返回错误状态代码404

Asp.net mvc 为什么ASP.NET MVC有时返回错误状态代码500,有时返回错误状态代码404,asp.net-mvc,routes,http-status-code-404,custom-error-pages,Asp.net Mvc,Routes,Http Status Code 404,Custom Error Pages,我正在尝试在ASP.NET MVC 5中实现自定义错误页。如果我输入了无效的URL,自定义错误页面在大多数情况下会显示我的自定义404未找到页面,并显示正确的响应404未找到,但在某些情况下,它会显示我的自定义500内部服务器错误页面,并显示响应500内部服务器错误 例如,我有以下路由配置: routes.MapRoute( null, "Category/{category}", new { controller = "Post", action = "Category

我正在尝试在ASP.NET MVC 5中实现自定义错误页。如果我输入了无效的URL,自定义错误页面在大多数情况下会显示我的自定义404未找到页面,并显示正确的响应404未找到,但在某些情况下,它会显示我的自定义500内部服务器错误页面,并显示响应500内部服务器错误

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

routes.MapRoute(
    null,
    "Category/{category}",
    new { controller = "Post", action = "Category" }
);
routes.MapRoute(
    null,
    "Archive/{year}/{month}/{day}/{title}",
    new { controller = "Post", action = "Detail" }
);
现在,如果我尝试导航到以下不存在的页面,它将响应404 not found错误,这是正确的

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

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

但是,对于我的其他路由配置:

routes.MapRoute(
    null,
    "Category/{category}",
    new { controller = "Post", action = "Category" }
);
routes.MapRoute(
    null,
    "Archive/{year}/{month}/{day}/{title}",
    new { controller = "Post", action = "Detail" }
);
justatestsite.com/archive/2014/8/25/noexists遵循正确的路由配置,页面不存在,错误状态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?????

您可以查看此博客,在ASP.NET MVC应用程序中实现自定义错误页面。在这里,您将能够同时处理404未找到和500个内部服务器错误


希望这有帮助:

您可以查看此博客,在ASP.NET MVC应用程序中实现自定义错误页面。在这里,您将能够同时处理404未找到和500个内部服务器错误


希望这能有所帮助:

您收到500个内部服务器错误,因为您在PostController上的详细操作中存在问题。您收到的实际错误消息是什么,您的操作是什么样子的

你是如何处理你找不到有问题的职位这一事实的?我猜你在发帖时没有得到任何回报,然后就摔倒了

你有没有试过这样的方法:

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);
}

您收到一个500内部服务器错误,因为您在PostController上的详细操作中出现问题。您收到的实际错误消息是什么,您的操作是什么样子的

你是如何处理你找不到有问题的职位这一事实的?我猜你在发帖时没有得到任何回报,然后就摔倒了

你有没有试过这样的方法:

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);
}

找出了哪里出了问题。我认为这与路由配置有关,但问题实际上在我的LINQ表达式中

我曾经

.Single()
若要返回单个帖子,则必须返回1篇帖子,而不是0篇。当我转到没有post的url时,有0个post,因此它会抛出内部服务器错误,而不是找不到错误

我把它改成了

.SingleOrDefault()

所以期望值可以是single1或default0,现在它抛出404 not found错误,这正是我想要的。

找出了哪里出了问题。我认为这与路由配置有关,但问题实际上在我的LINQ表达式中

我曾经

.Single()
若要返回单个帖子,则必须返回1篇帖子,而不是0篇。当我转到没有post的url时,有0个post,因此它会抛出内部服务器错误,而不是找不到错误

我把它改成了

.SingleOrDefault()

因此,预期值可以是single1或default0,现在它抛出404 not found错误,这正是我想要的。

不知道我以前的回答去了哪里……我已经用我的控制器编辑了我的问题,它类似于YoursCurial。您是否附加了调试器并证明了您的操作是正确的?错误消息中的详细信息是什么?谢谢,经过调试后,我发现问题实际上存在于我的LINQ表达式中,问题已得到解决。我不知道我以前的答复去了哪里…我已使用控制器编辑了我的问题,它与您的问题类似。您是否附加了调试器并证明了您的操作是正确的?错误消息中的详细信息是什么?谢谢,经过调试后,我发现问题实际上在我的LINQ表达式中,问题已经解决了是的,旧的单/第一个或默认值;啊,是的,古老的单曲/第一首奥德福栗子;