我试图在ASP.NET MVC 5中实现自定义错误页。如果我输入一个无效的URL,自定义错误页将在大多数情况下显示我的自定义404未找到页面的正确响应"404未找到“,但在某些情况下,它用响应”500个内部服务器错误“的自定义500个内部服务器错误页来响应?
例如,我有以下路由配置:
routes.MapRoute(
null,
"Category/{category}",
new { controller = "Post", action = "Category" }
);
现在,如果我试图导航到以下不存在的页面,它将响应404,这是正确的。
404/ status /‘t存在(按照正确的路由配置,页面不存在,错误状态为404)
justatestsite.com/Category/noexists/norouteconfig (不遵循正确的路由配置,页面不存在,错误状态为404)
但是,在我的其他路由配置中:
routes.MapRoute(
null,
"Archive/{year}/{month}/{day}/{title}",
new { controller = "Post", action = "Detail" }
);
500/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?
发布于 2014-09-03 00:52:32
搞清楚出了什么问题。我认为这与路由配置有关,但问题实际上在我的LINQ表达式中。
我用过
.Single()
若要返回单个帖子,则必须返回1个post,而不是0。当我转到没有post的url时,会有0 post,所以它会抛出内部服务器错误,而不是没有找到错误。
我把它换成了
.SingleOrDefault()
因此,期望值既可以是单值(1),也可以是默认值(0),现在它正在抛出404,这正是我想要的。
发布于 2014-09-02 05:53:26
您可以查看这个博客,以便在您的ASP.NET MVC应用程序中实现自定义错误页面。在这里,您将能够同时处理404 not和500个内部服务器错误。
希望这会有所帮助:)
发布于 2014-09-02 06:21:58
您得到了500个内部服务器错误,因为您的Detail
操作在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);
}
https://stackoverflow.com/questions/25623667
复制相似问题