ASP.NET Core Tips : 예외를 JSON 응답으로 변환하는 필터 구현 예
8360 단어 C#ASP.NET_Core
그리고, 음색을 타고 만들고 있다고 예외를 잡아 잊었을 때
같은 일이 됩니다(UseDeveloperExceptionPage를 사용하지 않으면 상태 코드만의 빈 페이지가 됩니다만).
역시 에러시에는 에러 정보를 태운 JSON을 돌려주고 싶네요.
라는 이유로 ExceptionFilter 를 꽂아 Controller 내에서 잡히지 않았던 예외를 자동적으로 에러용의 응답 JSON에 바꿔 돌려주는 필터의 샘플을 만드는 방법입니다.
고유 예외 정의
어떤 예외가 발생해도 500 고정으로 한다면 그것은 그것으로 괜찮습니다만, 역시 스테이터스 코드나 메세지를 어느 정도 제어하고 싶은 일도 있으므로, 독자적인 예외를 정의합니다.
public class APIException : Exception {
public int StatusCode_ = 500;
...
public APIException(int statusCode, string message,
[CallerMemberName] string memberName = "",
[CallerFilePath] string sourceFilePath = "",
[CallerLineNumber] int sourceLineNumber = 0
)
: this(message, memberName, sourceFilePath, sourceLineNumber) {
StatusCode_ = statusCode;
}
...
}
필터 구현
ExceptionFilterAttribute에서 파생된 필터를 구현합니다.
public class APIExceptionFilter : ExceptionFilterAttribute {
public override void OnException(ExceptionContext context) {
JsonResult result;
if (context.Exception is APIException) {
var ex = context.Exception as APIException;
result = new JsonResult(new {
StatusCode = ex.StatusCode_,
ex.Message
}) {
StatusCode = ex.StatusCode_
};
} else {
result = new JsonResult(new {
StatusCode = 500,
context.Exception.Message
}) {
StatusCode = 500
};
}
context.Result = result;
}
}
잡은 예외의 형태가 APIException 이었을 때는 그 스테이터스 코드와 메세지로부터, APIexception 이외이었을 때는 스테이터스 코드 500 과, 예외의 메세지로부터 리스폰스를 작성하도록(듯이) 합니다.
필터 사용
public void ConfigureServices(IServiceCollection services)
{
...
services.AddScoped<APIExceptionFilter>();
}
[ServiceFilter(typeof(APIExceptionFilter))]
public class ValuesController : Controller
{
...
// GET api/values/ArgumentNullException
[HttpGet("ArgumentNullException")]
public string GetArgumentNullException() {
throw new ArgumentNullException("ArgumentNullException");
}
// GET api/values/APIException
[HttpGet("APIException")]
public string GetAPIException() {
throw new APIException(HttpStatusCode.BadRequest, "Your exception message");
}
}
ConfigureServices에서 필터를 ServiceCollection에 추가하고 Controller에서 필터 사용을 선언합니다.
Controller에서 처리하지 않는 예외가 있으면 필터로 처리한 응답의 JSON이 반환됩니다.
샘플 소스
샘플은 여기
Reference
이 문제에 관하여(ASP.NET Core Tips : 예외를 JSON 응답으로 변환하는 필터 구현 예), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yossy6954/items/854b81edce290938d6f5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)