2017-04-05 1 views

답변

1
요청 내용 유형이 지원되지 않는 경우 초기 파이프 라인에 요청의 콘텐츠 형식을 확인하고 빈 몸으로 415 상태 코드를 반환합니다 메시지 처리기를 만들 수 있습니다

:

public class UnsupportedContentTypeHandler : DelegatingHandler 
{ 
    private readonly MediaTypeHeaderValue[] supportedContentTypes = 
    { 
     new MediaTypeHeaderValue("application/json") 
    }; 

    protected async override Task<HttpResponseMessage> SendAsync(
     HttpRequestMessage request, CancellationToken cancellationToken) 
    { 
     var contentType = request.Content.Headers.ContentType; 
     if (contentType == null || !supportedContentTypes.Contains(contentType)) 
      return request.CreateResponse(HttpStatusCode.UnsupportedMediaType); 

     return await base.SendAsync(request, cancellationToken); 
    } 
} 

가이 메시지 처리기를 추가 HTTP 구성의 메시지 핸들러 (에서이을 WebApiConfig) : 모든

config.MessageHandlers.Add(new UnsupportedContentTypeHandler()); 

그리고 당신은 얻을 것이다 빈 응답 콘텐츠 형식을 제공하지 않았거나 지원되지 않는 콘텐츠 형식을 가진 요청

public UnsupportedContentTypeHandler() 
{ 
    supportedContentTypes = GlobalConfiguration.Configuration.Formatters 
           .SelectMany(f => f.SupportedMediaTypes).ToArray(); 
} 
: 전역 설정에서 미디어 유형을 지원받을 수 있습니다

참고 (이 데이터를 중복되지 않도록하기 위해)

0

정상적인 방법으로 응답을 보내십시오. httpstatuscode enum으로 int를 전송하십시오.

response.StatusCode = (HttpStatusCode)415; 

또한 이와 같은 응답을 설정합니다.

HttpResponseMessage response = Request.CreateResponse((HttpStatusCode)415, "Custom Foo error!"); 

사용자 정의 설명 오류 메시지의 전체 예입니다.

public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken) 
    { 
     HttpResponseMessage response = Request.CreateResponse((HttpStatusCode)415, "Custom Foo error!"); 
     return Task.FromResult(response); 
    } 
관련 문제