2017-11-09 3 views
0

MVC4 웹 API를 사용하여 RESTful 웹 서비스를 작성했습니다. 내 웹 서비스를 호출하는 클라이언트 중 하나가 XML 본문을 게시하지만 JSON 응답을받는 중입니다.누락 된 헤더 값 추가

나는 클라이언트가 Content-type : application/xml 또는 Accept : application/xml 헤더 값을 설정하지 않는다는 것을 알게되었습니다.

내 웹 서비스를 호출하는 클라이언트는 전 세계에서 가장 큰 회사 중 하나이며 필요한 헤더 값을 추가하기를 거부합니다.

제 질문은 웹 서비스가 XML 응답을 반환 할 수 있도록 클라이언트가 보내지 않은 누락 된 헤더 값을 어떻게 추가합니까?

또는 웹 서비스에 XML 응답의 누락이 있습니까?

다음을 Global.asax.cs에 추가하려고했습니다.

protected void Application_BeginRequest(object sender, EventArgs e) 
    { 
     if (HttpContext.Current.Request.HttpMethod == "POST" 
      && HttpContext.Current.Request.CurrentExecutionFilePath.Contains("OrderInformation")) 
     { 
      HttpContext.Current.Request.Headers.Add("content-type", "application/xml"); 
      HttpContext.Current.Request.Headers.Add("Accept", "application/xml"); 
     } 
    } 

하지만 런타임에는 예외가 발생합니다.

TIA

매트

+0

헤더를 추가하는 대신 XML 형식의 기본 반환 형식을 사용할 수 있습니까? 아니면 다른 고객을 해칠 수 있습니까? – GPW

+1

관련,하지만 그 반대의 문제, 너무 엄격하게 중복하지 ... https://stackoverflow.com/questions/36492004/webapi-mvc-4-set-default-response-type (편집 : 나는 생각한다 Untested는 틀릴 수도 있습니다.) – GPW

+0

MVC에서 수행하는 방법을 잘 모르지만 일부 클래스를 재정의하고 필요에 따라 들어오는 요청 헤더를 수정할 수 있어야합니다. 다음 링크는 WCF와 관련이 있지만 비슷하지만 MVC를 사용하면 가능합니다. https://social.msdn.microsoft.com/Forums/vstudio/en-US/3b9a93a1-4406-416e-b328-1e0b626e563d/how-to-intercept- wcf-raw-messages? wcf – Softec

답변

0

감사 GPW. 링크 도움말을 사용하여 요청 헤더를 수정하는 DelegatingHandler를 만들었습니다.

public class MediaTypeDelegatingHandler : DelegatingHandler 
{ 
    protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) 
    { 
     var url = request.RequestUri.ToString(); 

     if (url.Contains("OrderInformation")) 
     { 
      request.Headers.Accept.Clear(); 
      request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml")); 
     } 

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