2016-07-06 4 views
1

ASP.NET 기본 코드와 함께 맞춤 HTTP 상태 코드 (4xx 등)를 반환 할 수있는 방법이 있습니까?맞춤 API 응답 ABP 프레임 워크가있는 HTTP 상태 코드

보다 세부적인 내용을 추가하기 위해 유효성 검사의 컨텍스트에서 사용자 지정 응용 프로그램 특정 HTTP 코드를 설정하고 싶습니다. 현재 ABP는 모든 유효성 검증 오류에 대해 200 (OK)을 설정합니다. 내가 결국 한 것은 모두 ABP 예외 필터를 교체

private void HandleAndWrapException(ExceptionContext context) 
    { 
     if (!ActionResultHelper.IsObjectResult(context.ActionDescriptor.GetMethodInfo().ReturnType)) 
     { 
      return; 
     } 

     context.HttpContext.Response.Clear(); 
     context.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError; 
     context.Result = new ObjectResult(
      new AjaxResponse(
       _errorInfoBuilder.BuildForException(context.Exception), 
       context.Exception is AbpAuthorizationException 
      ) 
     ); 

     context.Exception = null; //Handled! 
    } 
+0

나는 단지 [DontWrapResult]만이 도움이된다고 생각합니다. –

답변

1

했다 : ABP 소스 코드에서

Response.StatusCode 여기처럼 프레임 워크에 의해 설정되는 경우 아래처럼 몇 장소를 볼 수 있습니다. 내 사용자 지정 필터에서 필요한 상태 코드를 설정할 수 있습니다.

var filters = Configuration.Modules.AbpWebApi().HttpConfiguration.Filters; 
var currentExceptionFilter = filters 
    .First(h => h.Instance is AbpExceptionFilterAttribute).Instance; 

filters.Remove(currentExceptionFilter); 
filters.Add(IocManager.Resolve<MyApiExceptionFilter>()); 
+1

보안상의 이유로 모든 예외와 오류는 HTTP-200 (또는 2xx 성공 결과)으로 클라이언트에 보내야합니다. 그 이유; DDoS 제작자와 같은 공격자는 예외 페이지와 스캔 URL과 같이 http 오류가 발생합니다. DDoS 공격은 범람 된 예외 페이지로 쉽게 수행 할 수 있습니다. –