2017-11-09 3 views
0

Ich habe einen RESTful-Web-Service mit der MVC4-Web-API geschrieben. Einer der Clients, die meinen Webdienst aufrufen, stellt einen XML-Body, aber eine JSON-Antwort.Fehlende Header-Werte hinzufügen

Ich habe gelernt, dass der Client nicht den Header-Wert von Content-Typ: application/xml oder Accept: application/xml.

Der Kunde, der meinen Webdienst anruft, ist eines der größten Unternehmen der Welt und weigert sich, die erforderlichen Headerwerte hinzuzufügen.

Also meine Frage ist, wie füge ich die fehlenden Header-Werte, die der Client nicht sendet, so dass mein Web-Service eine Antwort in XML zurückgeben kann?

Oder wie bekomme ich meinen Webservice zur Antwort in XML mit fehlenden?

Ich habe versucht, das Folgende zu Global.asax.cs hinzuzufügen;

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"); 
     } 
    } 

Aber eine Ausnahme ist zur Laufzeit werfen.

TIA

Matt

+0

Anstatt die Header hinzufügen, können Sie nicht einfach den Standard-Rückgabetyp XML? Oder würde das vielleicht andere Kunden brechen? – GPW

+1

verwandt, aber das gegenteilige Problem, also nicht streng ein Duplikat ... https://StackOverflow.com/Questions/36492004/webapi-mvc-4-set-default-response-type (EDIT: Ich denke, es kommt auf die Reihenfolge, in der Sie die Formatierer in der Konfiguration angeben, wie unter dem Link? Nicht getestet, könnte falsch sein) – GPW

+0

Ich bin nicht sicher, wie in MVC zu tun, aber Sie sollten in der Lage sein, einige Klassen zu überschreiben und eingehende Anfrage Header wie erforderlich zu ändern. Der folgende Link bezieht sich auf WCF, sollte aber mit MVC möglich sein. https://social.msdn.microsoft.com/Forums/vstudio/en-US/3b9a93a1-4406-416e-b328-1e0b626e563d/how-to-intercept- wcf-row-messages? forum = wcf – Softec

Antwort

0

Dank GPW. Ihre Linkhilfe, ich habe einen DelegatingHandler erstellt, um den Anforderungsheader zu korrigieren

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); 
    } 
} 
Verwandte Themen