1

Asp.net 핵심 프로젝트에서 웹 UI 및 웹 API 컨트롤러가 모두 있습니다. 나는 https://www.devtrends.co.uk/blog/handling-errors-in-asp.net-core-web-api 기사를 다음과 startup.cs에 포함 된 ErrorController에서 작업을 처리오류 처리 동작에서 웹보기 또는 API 응답을 반환해야하는지 결정하는 방법

app.UseStatusCodePagesWithReExecute("/Error/error/{0}"); 
app.UseExceptionHandler("/Error/error/500"); 

그리고 추가 오류 :

[Route("error/{code}")] 
public IActionResult Error(int code) 
{ 
    return new ObjectResult(new ApiResponse(code)); 
} 

이 아니라 웹 페이지, 웹 API에 좋습니다. api의 경우 사용자 정의 객체 (JSON으로 직렬화)를 반환하지만 UI의 경우 사용자 정의보기를 반환하려고합니다. 나는

public IActionResult Error(int code) 
{ 
    if(CalledFromApiClient()) 
    { 
      return new ObjectResult(new ApiResponse(code)); 
    } 
    else 
     return View(“Error”); 
} 

질문 방법 CalledFromApiClient을 구현하는 것입니다 뭔가를 쓰고 싶어?

API 하위 폴더/네임 스페이스에있는 모든 API 컨트롤러를 유지하고 호출 스택을 사용하여 API 컨트롤러에서 예외가 발생했는지 여부를 확인하려고합니다. 작동해야하지만 좋지 않습니다.

더 좋은 방법이 있습니까?

+0

확인 헤더 (콘텐츠 협상)을 허용하는 규칙을 따르는 것으로 가정합니다. HTML을 묻는다면 – Nkosi

답변

1

나는 마침내이 요구 사항에 대한 일반적인 예는 당신이 오류 처리 할 MVC와 API 조치 모두 프로젝트가 https://www.devtrends.co.uk/blog/conditional-middleware-based-on-request-in-asp.net-core

같은 저자의 블로그에서 답을 찾을 각각 다를 수있다.

우리는 JSON는 JSON을 제공하기위한 요청이 요청하는 경우 URL 경로가 API를 컨트롤러 작업을 시작 WithSegment "API"

// returns Api error response 
app.UseWhen(context => context.Request.Path.StartsWithSegments("/api"), appBuilder => 
{ 
    appBuilder.UseStatusCodePagesWithReExecute("/apierror/{0}"); 
appBuilder.UseExceptionHandler("/apierror/500"); 
}); 
// returns MVC error page 
app.UseWhen(context => !context.Request.Path.StartsWithSegments("/api"), appBuilder => 
{ 
    appBuilder.UseStatusCodePagesWithReExecute("/error/{0}"); 
appBuilder.UseExceptionHandler("/error/500"); 
});