5

W aplikacji Web API używam Castle Windsor do dostarczania usług skonfigurowanych za pomocą okresu istnienia PerWebRequest, a wszystko działa poprawnie na IIS.Przeprowadzanie kontekstu na żądanie przy użyciu HttpRequestMessage.Properties

Jednak, gdy korzystam z samodzielnego hosta ASP.NET Web Host (Beta) package, muszę utworzyć niestandardowy czas życia, aby zakres tych usług był zgodny z żądaniem HTTP.

Jak mogę przenieść kontekst dla żądania za pomocą HttpRequestMessage.Properties?

Odpowiedz

8

Sugeruję używasz obsługi wiadomości, aby ustawić jakiś swój przedmiot w HttpRequestMessage.Property:

public class MyApplication : HttpApplication 
{ 
    protected void Application_Start() 
    { 
     RegisterHttpMessageHandlers(GlobalConfiguration.Configuration); 
    } 
    public void RegisterHttpMessageHandlers(HttpConfiguration config) 
    { 
     config.MessageHandlers.Add(new MyMessageHandler()); 
    } 
} 

public static class MyHttpMessageHandlerExtensions 
{ 
    public static class HttpPropertyKey 
    { 
     public static readonly string MyProperty = "MyCompany_MyProperty"; 
    } 

    public static MyContext GetContext(this HttpRequestMessage request) 
    { 
     return (MyContext)request.Properties[HttpPropertyKey.MyProperty ]; 
    } 

    public static void SetContext(this HttpRequestMessage request, MyContext ctx) 
    { 
     request.Properties[HttpPropertyKey.MyProperty] = ctx; 
    } 
} 
public class MyMessageHandler : DelegatingHandler 
{ 
    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) 
    { 
     request.SetContext(new MyContext(){/*some your data*/}); 
     return base.SendAsync(request, cancellationToken); 
    } 
} 

public class MyController: ApiController 
{ 
    public object GetData() 
    { 
     MyContext ctx = this.Request.GetContext(); // the extenstion method is used 
    } 
} 
+1

Nigdy nie wspomnieć, jak właściwie odczytać kontekst później w wywołaniu API. – BradLaney

+1

@BradLaney, mam rację, zaktualizowałem kod przykładowy. – Shrike

+0

@ShrikeMay Czy zalecam, aby Twój kod był bardziej ogólny? – user843681

Powiązane problemy