gpt4 book ai didi

asp.net-core - ASP.NET Core 中的错误 API URL

转载 作者:行者123 更新时间:2023-12-05 04:11:45 24 4
gpt4 key购买 nike

我在 ASP.NET Core 应用程序中有 API Controller ,如下所示。

[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。当用户输入错误的 url 时,我使用 UseStatusCodePagesWithRedirects() 重定向到 404 页面。这里的问题是当我使用错误的 API url 时,例如 /api/{username}/product_o。它重定向到 404 页面并返回状态代码 200。我将此 API 与 angular.js 一起使用。由于 API 在错误的 URL 上返回 404 页面,状态代码为 200,因此永远不会调用 $httpthen 方法的错误函数,并且在 response.data 我得到 404 页面的 HTML。如何在调用错误的API URL时返回404状态码,在调用错误的NON API URL时返回正常的404页面?下面是我调用错误的 API URL 时得到的屏幕截图。 enter image description here

基于@Daboul 关于 this link 的建议和解决方案在 startup.csconfigure 方法中添加以下部分即可。

Func<HttpContext, bool> isApiRequest = (HttpContext context) => context.Request.Path.ToString().Contains("/api/");
app.UseWhen(context => !isApiRequest(context), appBuilder =>
{
appBuilder.UseStatusCodePagesWithRedirects("~/Error/{0}");
});

最佳答案

我相信通过使用像 UseStatusCodePages() 或 UseStatusCodePagesWithRedirects() 这样的中间件,您决定实际返回一个包含错误代码(需要向浏览器发送代码 200)的正确 HTML 页面,而不是返回代码本身。就安全性而言,它通常被认为是一种良好做法。你所经历的对我来说似乎合乎逻辑。也许,我不确定它对你的情况是否有帮助,你可以做的是将 UseStatusCodePagesWithRedirects() 的使用限制在所有 Controller 上,但使用 UseWhen() 的 api Controller ,以便此特定“/api/" Controller 仍会返回 404?或以您的角度解析答案以检测是否发生任何错误。

关于asp.net-core - ASP.NET Core 中的错误 API URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41980052/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com