InvalidOperationException: 'Microsoft.AspNetCore.Http.IHttpContextAccessor' प्रकार के लिए सेवा को हल करने में असमर्थ


137

मैंने अपने asp.net core RC1 प्रोजेक्ट को RC2 में बदलना शुरू किया और इस समस्या का सामना किया जो अब IHttpContextAccessorहल नहीं हुई है ।

सरलता के लिए मैंने विज़ुअल स्टूडियो टेम्पलेट का उपयोग करके नए ASP.NET RC2 प्रोजेक्ट का निर्माण किया ASP.NET Core Web Application (.Net Framework)। मैंने होमकंट्रोलर के लिए कंस्ट्रक्टर जोड़ा, जो मेरे लिए टेम्पलेट बनाया।

public HomeController(IHttpContextAccessor accessor)
{
}

और मैं आवेदन शुरू करने के बाद मुझे अगली त्रुटि मिलती है:

InvalidOperationException: 'TestNewCore.Controllers.HomeChroller' को सक्रिय करने का प्रयास करते समय 'Microsoft.AspNetCore.Http.IHttpContextAccessor' प्रकार के लिए सेवा को हल करने में असमर्थ। Microsoft.Extensions.Internal.ActivatorUtilities.GetService (IServiceProvider सपा, प्रकार प्रकार, प्रकार आवश्यक है, बूलियन है .DefaultParameterRequired)

मेरे वास्तविक आवेदन IHttpContextAccessorमें मुझे अपनी सेवा वर्ग में _contextAccessor.HttpContext.Authenticationऔर उस तक पहुँचने के लिए हल करने की आवश्यकता है _contextAccessor.HttpContext.User। आरसी 1 में एवरेस्ट ठीक काम करता है। तो यह RC2 में कैसे हो सकता है?


इस मुद्दे पर यहां Aspnet GitHub रिपॉजिटरी पर चर्चा की गई है: github.com/aspnet/Hosting/issues/793
क्रिस पिकफोर्ड

जवाबों:


217

IHttpContextAccessor अब डिफ़ॉल्ट रूप से वायर्ड नहीं है, आपको इसे स्वयं पंजीकृत करना होगा

services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();

7
यह काम किया है। इसके साथ ही एक ही कहानीservices.AddScoped<IActionContextAccessor, ActionContextAccessor>()
यूरीपीपी

6
क्या हमारे पास आधिकारिक सिफारिश है कि उचित गुंजाइश क्या है? यह होना चाहिए Singleton, Scopedया Transient?
मार्क विंकेज

9
आह, यह यहाँ चर्चा है, और कई लोग इसे सुरक्षित रूप से हो सकता है सत्यापित करता है Singletongithub.com/aspnet/Hosting/issues/793
मार्क विंसज

ऐसा करते समय, मुझे यह त्रुटि मिली InvalidOperationException: Cannot consume scoped service:। कोई उपाय ?
Robouste

1
कृपया उपलब्ध विस्तार विधि का उपयोग करने के बारे में अगला उत्तर देखें services.AddHttpContextAccessor()जो कि Microsoft द्वारा पसंद / अनुशंसित है।
मार्टिन ब्लिस

120

.NET कोर 2.1 के रूप में एक विस्तार विधि है जिसे IHttpContextAccessorएक सिंगलटन के रूप में सही ढंग से पंजीकृत करने के लिए जोड़ा गया है । देखें सहायक IHttpContextAccessor रजिस्टर करने के लिए # 947 जोड़े । अपनी ConfigureServices()विधि में निम्नानुसार जोड़ें :

services.AddHttpContextAccessor();

यह इसके बराबर है:

services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.