我在ASP.NET Core应用程序中有API控制器如下。
[Route("api")]
public class UserController : Controller
{
[HttpGet("{userName}/product_info")]
public IActionResult GetProductInfo(string userName)
{
List<ProductInfo> productInfos = _repo.GetProductInfoByUserName(userName);
if (productInfos.Count > 0)
return Ok(productInfos);
else
return BadRequest("Unable to process requrest");
}
}
我可以使用/api/{username}/product_info
调用上面的API。
当用户输入错误的网址时,我正在使用UseStatusCodePagesWithRedirects()
重定向到404页面。这里的问题是当我使用错误的API网址时,例如/api/{username}/product_o
。它重定向到404页面并返回200的状态代码。我在angular.js中使用此API。由于API在状态代码为200的错误网址上返回404页面,因此永远不会调用then
$http
方法的错误函数,而在response.data
中我会获得404页面的HTML。如何在调用错误的API URL时返回404的状态代码,并在调用错误的NON API URL时返回正常的404页面?
下面是我在调用错误的API URL时获得的屏幕截图。
根据this link上的@Daboul建议和解决方案
在configure
的{{1}}方法中添加以下部分。
startup.cs
答案 0 :(得分:2)
我相信通过使用UseStatusCodePages()或UseStatusCodePagesWithRedirects()等中间件,您决定实际返回包含错误代码的正确HTML页面(需要向浏览器发送代码200)而不是返回代码本身。在安全性方面,它通常被认为是一种很好的做法。你所经历的对我来说似乎是合乎逻辑的。也许,我不确定它会对您的情况有所帮助,您可以做的是将UseStatusCodePagesWithRedirects()的使用限制为所有控制器,但使用UseWhen()限制api,以便在此特定的任何错误的URL &#34; / API /&#34;控制器仍会返回404?或者在角度中解析答案以检测是否发生任何错误。