如何为不存在的页面返回404错误?

问题描述 投票:1回答:1

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

该过程是这些文档名称中包含空格,因此,在单击网站上的链接时,请求在发送时用%20替换空格。该请求网址已从%20剥离,以获取实际的文档名称,并在后端带有空格。

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

例如:

  • 文档名称:Installation Prereq.md
  • 实际URL:/home/documentation/Installation%20Prereq.md->这将成功返回文档

但是

  • 错误URL:/home/documentation/InstallationPrereq.d->返回500错误,我想将此错误设置为404,因为没有具有这样名称的文档。
c# asp.net .net asp.net-mvc http-status-codes
1个回答
0
投票

。NET尝试访问/返回不存在的文件时会引发异常。 IIS(如果您的应用程序不处理它)将捕获此异常,该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;
}
© www.soinside.com 2019 - 2024. All rights reserved.