![如何处理无效页面请求导致的 404 错误,但不处理无效 API 响应?](https://linux22.com/image/1589951/%E5%A6%82%E4%BD%95%E5%A4%84%E7%90%86%E6%97%A0%E6%95%88%E9%A1%B5%E9%9D%A2%E8%AF%B7%E6%B1%82%E5%AF%BC%E8%87%B4%E7%9A%84%20404%20%E9%94%99%E8%AF%AF%EF%BC%8C%E4%BD%86%E4%B8%8D%E5%A4%84%E7%90%86%E6%97%A0%E6%95%88%20API%20%E5%93%8D%E5%BA%94%EF%BC%9F.png)
是否可以以不同于服务调用的 404 响应的方式处理页面请求的 404?
如果有人请求,我希望默认显示 404 页面https://example.com/pagethatdoesnotexist.html。但是,我希望从https://otherexample.com/api/thing/1汇入我的客户端应用程序,以便我可以向用户提供有用的消息。
我尝试在 web.config 中使用 customErrors,但它捕获了所有内容。这可行吗?还是我只能使用配置中的默认 404 页面捕获全部或全部不捕获?
答案1
您可以做的是创建自定义404页。
在该页面上,您可以放置所需的所有逻辑,例如,处理 API 逻辑,甚至更改响应代码以发送200代替404。
如果某些事情不是由您的自定义逻辑处理的,您应该使用以下代码发送 404 响应代码:(使用 PHP 的示例)
<?php
header("HTTP/1.1 404 Not Found");
header("Status: 404 Not Found");
?>
答案2
我的解决方案不起作用的原因是我对自定义错误和 http 错误的误解。我正在寻找
<httpErrors>
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" prefixLanguageFilePath="" path="/errorPages/404.html" responseMode="ExecuteURL" />
</httpErrors>
这将捕获任何错误的页面请求并允许我的应用程序处理来自 api 响应的 404。