【问题标题】:How to return a 404 error for non-existent page?如何为不存在的页面返回 404 错误?
【发布时间】:2020-01-17 14:19:51
【问题描述】:

我正在开发一个 .NET/C# 文档 Web 应用程序。单击网站上的链接时,它会按名称获取文档并显示页面。

过程是这些文档名称中包含空格,因此当单击网站上的链接时,请求在发送时将空格替换为 %20。该请求 url 正在从 %20 中删除,以获取后端带有空格的实际文档名称。

问题是,如果我在 url 上输入不带空格的文档名称,则会出现内部错误,而不是 404 错误。有谁知道如何解决这个问题?

例如:

  • 文档名称:安装 Prereq.md
  • 实际网址:/home/documentation/Installation%20Prereq.md --> 成功返回文档

但是,

  • 错误 URL:/home/documentation/InstallationPrereq.d --> 返回 500 错误,我想将此设置为 404 错误,因为没有 具有此类名称的文档。

【问题讨论】:

  • 有一个 try-catch,你会得到 500 个异常,然后将响应作为 404 发送。
  • 您应该分享您的操作方法代码。
  • 这两个示例的文件扩展名也不同。

标签: c# asp.net .net asp.net-mvc http-status-codes


【解决方案1】:

当您尝试访问/返回不存在的文件时,.NET 会引发异常。这个异常被 IIS 捕获(如果你的应用程序没有处理它),它返回一个带有500 状态码的 HTTP 响应。

解决方案是检查文件是否存在,即File.Exists("folder/filename")

如果它返回false,让它知道你的控制器的动作,它会返回一个带有404状态码的响应:

public ActionResult ControllerAction(string filename)
{
    var theFile = TryFindFile(filename, out fileFound);

    if (fileFound == false)
        return new HttpNotFoundResult(); // this returns a HTTP response with 404 status code

    return theFile;
}

【讨论】:

    猜你喜欢
    • 2018-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 2018-05-15
    • 1970-01-01
    • 1970-01-01
    • 2014-01-30
    相关资源
    最近更新 更多