【问题标题】:How can I return 404 page view in controller?如何在控制器中返回 404 页面视图?
【发布时间】:2020-11-14 19:30:23
【问题描述】:

我的项目已经有一个 404 页面。我通过startup.cs中的app.UseStatusCodePages()设置它,效果很好。

现在我有了一个控制器:

[Route("{id:int}.html")]
public IActionResult Test(int id)
{
      var A=///some logic;
      if(A!=null)
      {
       return View(A);
      }
      else
      {
       return NotFound();
      }
}

好吧,如果 A 为空,浏览器只返回一个 This localhost page can’t be found 页面,而不是 404 页面。

我不想使用重定向方法,因为它会返回 302 代码,而不仅仅是 404 代码。

我该如何解决这个问题?谢谢。

【问题讨论】:

    标签: asp.net-core .net-core


    【解决方案1】:

    您可以在返回 View 时指定 404 页面的路径。

    例如return View("~/Views/Error/404.cshtml");

    如果你想多次使用它,我建议把它放在一个基类的函数中。

    protected IActionResult 404View() {
        return View("~/Views/Error/404.cshtml");
    }
    

    NotFound 返回状态码而不是视图,如摘要中所述

    创建一个生成 Microsoft.AspNetCore.Http.StatusCodes.Status404NotFound 的 Microsoft.AspNetCore.Mvc.NotFoundResult


    如果你想返回一个 404 状态码和一个视图,你可以在返回视图之前在响应上设置状态码,如How to return 404 with asp.net mvc view 中所述。

    Response.StatusCode = 404;
    return View("~/Views/Error/404.cshtml");
    

    【讨论】:

    • 这种方式返回页面成功,但返回的是200状态码,而不是404状态码。
    • 我不认为你可以做你想做的事。 404 状态码告诉浏览器该页面未找到。
    • 显然您可以在返回视图之前执行Response.StatusCode = 404; How to return 404 with asp.net mvc view
    猜你喜欢
    • 2015-12-06
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-23
    • 2016-10-30
    • 2012-11-07
    • 2013-08-28
    相关资源
    最近更新 更多