사용자 지정 예외 처리기를 이해하려고하지만 요령을 이해하지 못하고 있습니다. 다음 페이지에 설명 된대로 사용자 지정 예외 처리기를 구현해 보았습니다.
https://www.exceptionnotfound.net/the-asp-net-web-api-exception-handling-pipeline-a-guided-tour/ https : // docs.microsoft.com/en-us/aspnet/web-api/overview/error-handling/web-api-global-error-handling
이제 내 코드는 다음과 같습니다.
public class CustomRestErrorHandlerException : ExceptionHandler
{
public void CustomError(String error)
{
var message = new HttpResponseMessage(HttpStatusCode.NoContent)
{
Content = new StringContent("An unknown error occurred saying" + error)
};
throw new HttpResponseException(message);
}
public override void Handle(ExceptionHandlerContext context)
{
if (context.Exception is ArgumentNullException)
{
var result = new HttpResponseMessage(HttpStatusCode.BadRequest)
{
Content = new StringContent(context.Exception.Message),
ReasonPhrase = "ArgumentNullException"
};
context.Result = new ErrorMessageResult(context.Request, result);
}
else if (context.Exception is ArgumentException)
{
var result = new HttpResponseMessage(HttpStatusCode.NoContent)
{
Content = new StringContent(context.Exception.Message),
ReasonPhrase = "Argument is not found"
};
context.Result = new ErrorMessageResult(context.Request, result);
}
else if (context.Exception is ArgumentOutOfRangeException)
{
var result = new HttpResponseMessage(HttpStatusCode.NotImplemented)
{
Content = new StringContent(context.Exception.Message),
ReasonPhrase = "Argument is out of range"
};
context.Result = new ErrorMessageResult(context.Request, result);
}
else
{
CustomError(context.Exception.Message);
}
}
public class ErrorMessageResult : IHttpActionResult
{
private HttpRequestMessage _request;
private HttpResponseMessage _httpResponseMessage;
public ErrorMessageResult(HttpRequestMessage request, HttpResponseMessage httpResponseMessage)
{
_request = request;
_httpResponseMessage = httpResponseMessage;
}
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
return Task.FromResult(_httpResponseMessage);
}
}
}
그런 다음 내가 분명히 잘못한 예외 처리기를 호출하려고합니다. (이것은 아마도 <<를 이해하지 못합니다.
[Route("api/***/***")]
[HttpGet]
public IHttpActionResult Clear****()
{
try
{
// try clearing
}
catch(Exception e)
{
throw new CustomRestErrorHandlerException(); << error occurs here
}
return this.Ok();
}
보시다시피 예외가 예외 처리기가 아니기 때문에 오류가 발생하지만 어디에도 설명되지 않았으므로 사용자 지정 예외 처리기를 통해 예외를 throw하는 방법을 모릅니다.
누구든지 작은 예를 들어 설명 할 수 있습니까?
ExceptionHandler 는 Web API 구성에 등록되어야합니다. 이는 아래와 같이 WebApiConfig.cs 파일에서 수행 할 수 있습니다 System.Web.Http.HttpConfiguration
. 여기서 config는 유형 입니다.
config.Services.Replace(typeof(IExceptionHandler), new GlobalExceptionHandler());
등록되면 처리되지 않은 예외 중에 자동으로 호출됩니다. 이를 테스트하기 위해 다음과 같은 작업 메서드에서 예외를 throw 할 수 있습니다.
[Route("api/***/***")]
[HttpGet]
public IHttpActionResult Clear****()
{
try
{
// try clearing
}
catch(Exception e)
{
throw new ArgumentNullException(); << error occurs here
}
return this.Ok();
}
이제 예외 처리기에 중단 점을 놓고 전역 ExceptionHandler에서 처리되지 않은 예외를 포착하는 방법을 볼 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다