MVC简单错误处理BadRequest

时间:2016-08-11 08:32:15

标签: c# asp.net-mvc asp.net-mvc-4

我尝试了很多方法,但仍未能成功。 只是想在请求无效时显示404/500。

EG。没有用户ID = 100,如果有人发出此请求,则应返回404.另一方面,如果发生服务器错误则抛出500.

我希望此行为能够应用整个应用。

public ActionResult EditUser(int Id)
    {
        var db = new UserDbContext();
        var usr = db.Users.Where(a => a.Id == Id).SingleOrDefault();
        if (usr == null) return new HttpStatusCodeResult(HttpStatusCode.NotFound, "User not found");
        return View(usr);
    }

使用system.web中的webconfig

<customErrors mode="On"  redirectMode="ResponseRewrite" defaultRedirect="~/General">
  <error statusCode="404" redirect="~/NotFound" />
  <error statusCode="403" redirect="~/BadRequest" />
</customErrors>

并在system.webserver

<httpErrors existingResponse="PassThrough"></httpErrors>

尝试了很多组合方式,无法使其发挥作用。 我得到的结果是一个空页面,然后是浏览器控制台显示404/500错误。但我希望它能在页面上显示。

有人可以指出我的错误。感谢

3 个答案:

答案 0 :(得分:2)

你可以使用

throw new HttpException(404, "HTTP/1.1 404 Not Found");

return HttpNotFound();

或返回错误视图表单共享文件夹

return View("NotFound");

答案 1 :(得分:0)

你可以添加

public ActionResult EditUser(int Id)
    {
        var db = new UserDbContext();
        var usr = db.Users.Where(a => a.Id == Id).SingleOrDefault();
        if (usr == null) return new HttpStatusCodeResult(HttpStatusCode.NotFound, "User not found");
        Response.StatusCode = 400;
        return View(usr);
    }

答案 2 :(得分:0)

只需抛出/返回这样的HTTP异常:

throw new HttpException(404, "Some description");

对于ASP.NET MVC 3及更高版本,

return new HttpNotFoundResult("optional description");

return HttpNotFound("I did not find message goes here");适用于MVC 4及以上版本。