অবৈধ অপারেশন এক্সসেপশন: 'মাইক্রোসফ্ট.এএসপ নেটটোর.এইচটিপি.আইএইচটিটিপেক্সটেক্সট অ্যাকসেসর' এর জন্য পরিষেবাটি সমাধান করতে অক্ষম


137

আমি আমার এসপ নেট কোর আরসি 1 প্রকল্পটিকে আরসি 2 তে রূপান্তর করতে শুরু করেছি এবং এমন সমস্যার মুখোমুখি হয়েছি যা এখন IHttpContextAccessorসমাধান হয়নি।

সরলতার জন্য আমি ভিজুয়াল স্টুডিও টেম্পলেট ব্যবহার করে নতুন এএসপি.এনইটি আরসি 2 প্রকল্প তৈরি করেছি ASP.NET Core Web Application (.Net Framework)। আমি হোম কন্ট্রোলারের জন্য কনস্ট্রাক্টর যুক্ত করেছি যা আমার জন্য টেমপ্লেট তৈরি করেছে।

public HomeController(IHttpContextAccessor accessor)
{
}

এবং আমি আবেদন শুরু করার পরে আমি পরবর্তী ত্রুটি পেয়েছি:

অবৈধ অপারেশন এক্সসেপশন: 'টেস্টনিউভোর.কমট্রোলারস.হমকন্ট্রোলার' সক্রিয় করার চেষ্টা করার সময় 'মাইক্রোসফ্ট.এএসপ নেটটোর.এইচটিপি.আইএইচটিটিপেক্সটেক্সট অ্যাকসেসর' টাইপের জন্য পরিষেবাটি সমাধান করতে অক্ষম। в মাইক্রোসফ্ট.এক্সটেনশনস.ইন্টার্নাল.একটিভেটর ইউটিলিটিস.গেট সার্ভিস (আইএস সার্ভিস প্রোভাইডার এসপি, প্রকারের প্রকার, প্রয়োজনীয় প্রকারের মাধ্যমে, বুলিয়ান ডিফল্টপ্যারামিটার প্রয়োজনীয়)

আমার বাস্তব আবেদন আমি সমাধান করতে IHttpContextAccessorঅ্যাক্সেস পাওয়ার জন্য আমার নিজের সেবা ক্লাসে _contextAccessor.HttpContext.Authenticationকরুন এবং _contextAccessor.HttpContext.User। এভারেথিং আরসি 1 এ দুর্দান্ত কাজ করে। সুতরাং এটি আরসি 2 তে থাকার অনুমান কীভাবে করা যায়?


এই সমস্যাটি এখানে গিটহাবের সংগ্রহস্থলটি নিয়ে আলোচনা করা হয়েছে: 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। কোন ধারণা ?
রোবস্টে

1
services.AddHttpContextAccessor()মাইক্রোসফ্ট দ্বারা পছন্দ / প্রস্তাবিত প্রস্তাবিত এক্সটেনশন পদ্ধতিটি ব্যবহার করার বিষয়ে দয়া করে পরবর্তী উত্তরটি দেখুন ।
মার্টিন ব্লাইস

120

.NET কোর 2.1 হিসাবে একটি এক্সটেনশন পদ্ধতি রয়েছে যা IHttpContextAccessorএকটি সিঙ্গলটন হিসাবে সঠিকভাবে নিবন্ধ করতে যুক্ত করা হয়েছে । দেখুন সাহায্যকারী IHttpContextAccessor রেজিস্টার # 947 যোগ । আপনার ConfigureServices()পদ্ধতিতে কেবল নিম্নলিখিত হিসাবে যুক্ত করুন :

services.AddHttpContextAccessor();

এটি সমান:

services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.