다음과 같이 ASP.NET 핵심 응용 프로그램에 API 컨트롤러가 있습니다.ASP.NET 코어의 잘못된 API URL
[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/{username}/product_o
같은 잘못된 API URL을 사용할 때입니다. 404 페이지로 리다이렉트하여 200의 상태 코드를 반환합니다.이 API를 angular.js와 함께 사용하고 있습니다. API가 상태 코드 200의 잘못된 URL에 404 페이지를 반환하기 때문에 then
메서드의 오류 함수는 $http
이 호출되지 않으며 response.data
에 404 페이지의 HTML이 표시됩니다. 잘못된 API URL이 호출되면 404 상태 코드를 반환하고 잘못된 NON API URL을 호출하면 정상 404 페이지를 반환합니까? 다음은 잘못된 API URL을 호출 할 때 얻는 내용을 보여주는 스크린 샷입니다.
는 this link 이 startup.cs
작품의 configure
방법에 참여 다음 추가에 @Daboul 제안과 솔루션을 기반으로.
Func<HttpContext, bool> isApiRequest = (HttpContext context) => context.Request.Path.ToString().Contains("/api/");
app.UseWhen(context => !isApiRequest(context), appBuilder =>
{
appBuilder.UseStatusCodePagesWithRedirects("~/Error/{0}");
});
나는 angular.js에 익숙하지 않아서 자바 스크립트 측면에서 많은 것을 할 수 없다. ASP.NET 측에서 StatusCodePages를 사용하여 API 컨트롤러를 제외시키기 위해 어떤 종류의 미들웨어를 사용해야합니까? 이 문제는 API 컨트롤러에'Authorize' 속성을 추가 할 때도 발생합니다. 로그인하지 않고 API에 접근하려고 할 때'Authorize' 속성을 추가 한 후 200 개의 상태 코드를 가진 로그인 페이지를 반환합니다. 이 때문에'Authorize' 속성을 제거해야했습니다. –
UseWhen()이 작업을 수행합니다. 예를 들어 여기에서 예제를 찾을 수 있습니다 : http://stackoverflow.com/questions/37841270/branching-asp-net-core-pipeline-authentication UseWhen()를 URL의 조건과 함께 사용하면 context.Request.Path .StartsWithSegments ("/ API /")' – Daboul
Update1 버전에서 'app.UseWhen (context =>! isApiRequest (context), appBuilder => { app.UseStatusCodePagesWithRedirects ("~/Error/{0}"); (~/Error/{0} ") ;; });'switch app for ')';은 다음과 같이 변경해야합니다 : app.UseWhen (context =>! isApiRequest (context), appBuilder => { appBuilder.UseStatusCodePagesWithRedirects appbuilder. – Daboul