【问题标题】:Why ASP.NET MVC sometimes returns error status code 500 and sometimes error status code 404为什么 ASP.NET MVC 有时返回错误状态代码 500 有时返回错误状态代码 404
【发布时间】:2014-10-26 17:38:30
【问题描述】:

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

比如我有如下路由配置:

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

现在如果我尝试导航到以下不存在的页面,它会响应 404 not found 错误,这是正确的。

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(遵循正确的路由配置,页面不存在,错误状态 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 routes http-status-code-404 custom-error-pages


    【解决方案1】:

    弄清楚出了什么问题。我以为和路由配置有关,其实问题出在我的 LINQ 表达式上。

    我用过

    .Single()
    

    要返回单个帖子,所以必须返回 1 个帖子而不是 0。当我转到没有帖子的 url 时,有 0 个帖子,所以它会抛出内部服务器错误而不是找不到错误。

    我改成

    .SingleOrDefault()
    

    所以期望值可以是single(1) 或default(0),现在它抛出404 not found 错误,这正是我想要的。

    【讨论】:

    • 啊,是的,老单曲/第一OrDefault栗子;)
    【解决方案2】:

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

    http://blog.janjonas.net/2011-12-11/asp-net-mvc3-custom-error-pages-non-ajax-requests-jquery-ajax-requests

    希望这会有所帮助:)

    【讨论】:

      【解决方案3】:

      您收到 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);
      }
      

      【讨论】:

      • 不知道我之前的回复去了哪里...我已经用我的控制器编辑了我的问题,它与你的相似
      • 很好奇。您是否附加了调试器并证明您确实采取了正确的行动?错误消息中的详细信息是什么?
      • 谢谢,经过调试发现问题其实出在我的LINQ表达式上,问题已解决
      猜你喜欢
      • 2021-09-28
      • 2016-08-04
      • 2012-07-07
      • 1970-01-01
      • 1970-01-01
      • 2012-11-14
      • 2021-04-25
      • 1970-01-01
      相关资源
      最近更新 更多