我正在尝试在ASP.NET MVC 5中实现自定义错误页面。如果我输入了无效的URL,则自定义错误页面将在大多数时间显示我的自定义404未找到页面,并且回复正确“404 not found” ,但在某些情况下,它使用我的自定义500内部服务器错误页面响应“500内部服务器错误”??
例如,我有以下路由配置:
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(遵循正确的路由配置,页面不存在,错误状态错误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 ?????
答案 0 :(得分:2)
弄清楚出了什么问题。我认为它与路由配置有关,但问题实际上在我的LINQ表达式中。
我用过
.Single()
返回一个帖子,所以必须有1个帖子返回而不是0.当我去了没有帖子的网址时,有0个帖子,所以它会抛出内部服务器错误而不是找不到错误。
我把它改成了
.SingleOrDefault()
所以期望值可以是单个(1)或默认值(0),现在它抛出404未找到错误,这就是我想要的。
答案 1 :(得分:1)
您可以查看此博客,以在ASP.NET MVC应用中实现自定义错误页面。在这里,您将能够处理404未找到和500内部服务器错误。
希望这会有所帮助:)
答案 2 :(得分:1)
您收到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);
}
您收到的实际错误消息是什么,以及你的行为是什么样的?
您如何处理无法找到相关帖子的事实?我猜你自己没有得到任何回复,然后摔倒。
你有没有试过像:
{{1}}