5

का उपयोग कर प्रति-अनुरोध संदर्भ लेना एक वेब एपीआई एप्लिकेशन में, मैं कैसल विंडसर का उपयोग PerWebRequest जीवनकाल के साथ कॉन्फ़िगर की गई सेवाओं की आपूर्ति के लिए करता हूं और सब कुछ आईआईएस पर ठीक काम करता है।HttpRequestMessage.Properties

हालांकि, जब मैं एएसपी.नेट वेब एपीआई सेल्फ होस्ट (बीटा) package का उपयोग करता हूं तो मुझे प्रति HTTP अनुरोध उन सेवाओं को दायरा देने के लिए कस्टम जीवनकाल बनाना होगा।

मैं HttpRequestMessage.Properties का उपयोग कर प्रति-अनुरोध संदर्भ कैसे ले सकता हूं?

उत्तर

8

मैं 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

तुम कभी कैसे वास्तव में अपने API कॉल में बाद में संदर्भ पढ़ने के लिए उल्लेख किया है। – BradLaney

+1

@BradLaney, ठीक है, मैंने नमूना कोड अपडेट किया है। – Shrike

+0

@ShrikeMay मैं आपके कोड को अधिक सामान्य बनाने की सलाह देता हूं? – user843681