ASP.NET Core

时间:2017-02-01 12:38:21

标签: asp.net-core asp.net-core-mvc asp.net-core-1.0

我在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时获得的屏幕截图。 enter image description here

根据this link上的@Daboul建议和解决方案 在configure的{​​{1}}方法中添加以下部分。

startup.cs

1 个答案:

答案 0 :(得分:2)

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