RSS FeedFeed TwitterTwitter XINGXING
  
Meine Bücher

Erscheint demnächst: Verteilte Systeme und Services mit .NET 4.5: Konzepte und Lösungen für WCF 4.5 und ASP.NET Web-API ,
Hanser Fachbuchverlag

Weitere Infos

 

.NET 4.5 Update,
Microsoft Press

Weitere Infos

 

Verteilte Systeme und Services mit .NET 4.0: Konzepte und Lösungen mit WCF 4.0,
Hanser Fachbuchverlag

Weitere Infos

 
Weitere Bücher
Meine Artikel

Leichtgewichtige Kommunikation: REST-basierte Services mit dem neuen API aus der ASP.NET-Familie,
windows.developer

Weitere Infos

 

Windows Azure Tutorial, Teil 3: Verbindung zwischen Cloud- und lokalen Applikationen,
iX - Magazin für professionelle Informationstechnik

Weitere Infos

 

Weitere Artikel

Schulung & Beratung

Gemeinsam mit meinen Kollegen aus dem IT-Visions Netzwerk unterstützte ich durch zielgerichtete Inhouse-Trainings und Consulting Unternehmen bei der Planung und Umsetzung großer Software-Systeme mit der Microsoft/.NET-Plattform.

 
Konferenzen

Scandinavian Developer Conference 2013 (SDC 2013) von 04.03.2013 bis 06.03.2013 in Göteborg

Meine Talks

Web-Site der Konferenz

 

BASTA! on Tour Spring 2013 von 24.04.2013 bis 26.04.2013 in Düsseldorf

Meine Talks

Web-Site der Konferenz

 

5th SOA and Cloud-Technology Symposium 2012 von 24.09.2012 bis 25.09.2012 in London

Meine Talks

Web-Site der Konferenz

 
Weitere Konferenzen
von Manfred, 22. April 2012 23:00
Querschnittsfunktionen, die für alle Services zur Ausführung gebracht werden sollen, können in Message Handler ausgelagert werden. Die nachfolgende Listing zeigt, wie man einen solchen Message-Handler durch Ableiten von DelegatingHandler implementieren kann.
public class LoggingHandler : DelegatingHandler 
{
    protected override Task<HttpResponseMessage> SendAsync(
                 HttpRequestMessage request, 
                 System.Threading.CancellationToken cancellationToken)
    {
        Debug.WriteLine("Begin Request: {0} {1}", request.Method, request.RequestUri);
        return base.SendAsync(request, cancellationToken);
     }
}
Damit ASP.NET Web API den Handler verwendet, ist er wie folgt - am besten in der Global.asax - zu registrieren.
GlobalConfiguration.Configuration.MessageHandlers.Add(new LoggingHandler());
Message-Handler können auch die abgefangene Nachricht auf der Ebene von HTTP bearbeiten. Ein gutes Beispiel dazu ist der aus der Dokumentation übernommene MethodOverrideHandler. Er löst das Problem, dass Firewalls mitunter DELETE- oder PUT-Anfragen blocken. Dazu setzt er auf die übliche Konvention, dass in diesen Fällen einfach POST zu verwenden ist. Das eigentliche Verb findet sich im HTTP-Header X-HTTP-Method-Override.
public class MethodOverrideHandler : DelegatingHandler      
{    
    readonly string[] _methods = { "DELETE", "HEAD", "PUT" };    
    const string _header = "X-HTTP-Method-Override";    
    protected override Task<HttpResponseMessage> SendAsync(
                HttpRequestMessage request, 
                CancellationToken cancellationToken)    {        

        // Check for HTTP POST with the X-HTTP-Method-Override header.        
        if (request.Method == HttpMethod.Post && request.Headers.Contains(_header))        {            
            // Check if the header value is in our methods list.            
            var method = request.Headers.GetValues(_header).FirstOrDefault();            
            if (_methods.Contains(method, StringComparer.InvariantCultureIgnoreCase))            
            {                
                // Change the request method.                
                request.Method = new HttpMethod(method);            
            }        
        }        
        return base.SendAsync(request, cancellationToken);    
    }
}

Kategorien: ASP.NET Web API