এএসপি.নেট পরিচয় - এইচটিপিএন কনটেক্সট-এ গেটওউইনকন্টেক্সটের কোনও এক্সটেনশন পদ্ধতি নেই


384

আমি এএসপি.এনইটি পরিচয়ের নমুনা ডাউনলোড করেছি এবং সফলভাবে এখান থেকে চালিয়েছি: https://github.com/rustd/AspnetIdentitySample

আমি এখন আমার প্রকল্পে ASP.NET পরিচয় কাঠামো বাস্তবায়নের মাঝখানে আছি এবং একটি সমস্যায় পড়েছি, যা আমাকে সারাদিন পাগল করে তুলেছে ...

GetOwinContext() আমার উপর কোনও এক্সটেনশন পদ্ধতি হিসাবে উপস্থিত নেই HttpContext

আমি ক্লাস লাইব্রেরিতে পরিচয় কাঠামো বাস্তবায়ন করছি। আমি পরিচয় কাঠামোর সমস্ত সাম্প্রতিক (প্রাক-প্রকাশ সংস্করণ) ইনস্টল করেছি এবং এটি বাদে - সবকিছু ঠিকঠাক কাজ করছে।

আমি আমার নিয়ামকটিতে একই সরাসরি হিসাবে একই কোডটি প্রয়োগ করার চেষ্টা করেছি এবং একই সমস্যা খুঁজে পেয়েছি।

আমি স্পষ্টভাবে কোথাও রেফারেন্স মিস করছি, যদিও আমার কোন ধারণা নেই ..! ..

যে কোড-ব্লক আমাকে হত্যা করছে তা হ'ল:

private IAuthenticationManager AuthenticationManager
{
    get
    {
        return HttpContext.GetOwinContext().Authentication;
    }
}

আমি নিম্নলিখিতগুলিতে রেফারেন্স যুক্ত করেছি - আমার ক্লাস লাইব্রেরিতে এগুলি উভয়ই চেষ্টা করে দেখেছি এবং নিয়ামকের উপরও সরাসরি রেখেছি, তাদের কেউই আমার পক্ষে কাজ করে না ...

using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using Microsoft.Owin.Security;
using Microsoft.Owin;
using System.Web;

... এটি আমাকে দেওয়াল চালাচ্ছে .... কোন ধারণা?

হালনাগাদ

আমি নমুনায় আইডেন্টিটি এবং ওউইউনের সংস্করণগুলি পরীক্ষা করে দেখেছি এবং আমার সমাধানে আমারও একই সংস্করণ রয়েছে কিনা তা নিশ্চিত হয়েছি।

আরও, আমি যদি নমুনায় আইটেম ব্রাউজারটি অনুসন্ধান করি তবে আমি GetOwinContextপদ্ধতিটি সন্ধান করতে পারি, তবে আমি যখন আমার সমাধানটিতে এটি অনুসন্ধান করি তখন এটি কোথাও পাওয়া যায় না ... আমার অবশ্যই কিছু লাইব্রেরি তারিখের বাইরে থাকতে হবে, তবে আমি করতে পারি ' এটি খুঁজে না!

উত্তর:


712

আহা!

আমি এটি পেয়েছি ... আমার কাছে অতিরিক্ত প্যাকেজ নেই, ডাকা হয়Microsoft.Owin.Host.SystemWeb

একবার আমি এটি অনুসন্ধান এবং ইনস্টল করার পরে এটি কাজ করে।

এখন - আমি নিশ্চিত নই যে আমি কেবল সমস্ত কিছু মিস করেছি, যদিও বিভিন্ন টিউটোরিয়ালের মধ্য দিয়ে যাওয়ার সময় এই জাতীয় লাইব্রেরি বা প্যাকেজের কোনও রেফারেন্স পাওয়া যায় নি। আমি এই সমস্ত পরিচয় কাঠামো ইনস্টল করার সময় এটি ইনস্টল করা হয়নি ... নিশ্চিত যে এটি কেবল আমার ছিল কিনা ..

সম্পাদনা করুন যদিও এটি Microsoft.Owin.Host.SystemWebবিধানসভায় রয়েছে এটি System.Webনামের জায়গার একটি এক্সটেনশন পদ্ধতি , সুতরাং আপনার প্রাক্তনটির রেফারেন্স থাকা উচিত usingএবং পরবর্তীটি হওয়া উচিত।


6
এটি খুঁজে বের করার জন্য ধন্যবাদ: আমি এই টিউটোরিয়ালটি ব্যবহার করছি asp.net/identity/overview/getting-started/… এবং এটি একটি অনুপস্থিত পদক্ষেপ
ফ্রেঞ্চি

23
@ টেন - আপনার মন্তব্যের জন্য আপনাকে ধন্যবাদ ... যদিও আমি 'লক্ষ্যহীনভাবেই চালাচ্ছিলাম' - আমি বিশ্বস্ত সংস্থান থেকে একটি টিউটোরিয়াল অনুসরণ করছিলাম; Asp.net সাইট থেকে কম। তাদের টিউটোরিয়ালে তাদের এই পদক্ষেপটি ছিল না (এটি পরে যুক্ত করা হয়েছে) - এছাড়াও, লোকেরা এই উত্তরটিকে সমর্থন করে এবং মূল প্রশ্নটিও ইঙ্গিত দেয় যে আমি এই সমস্যাটির সাথে একমাত্র ছিলাম না।
ড্যারেন ওয়াইন রাইট

5
@ ড্যারেন, যথেষ্ট ন্যায্য। (আমি বুঝতে পারি যে আমি এটি আলাদাভাবে বলতে পারি
ed

3
কেবলমাত্র রেফারেন্সের জন্য: nuget.org/packages/Mic Microsoft.Owin.Host.SystemWeb
ক্রিস বোহাতকা

5
এই রেফারেন্সটি আপডেট করার সময় থেকে এটি ছিল কিনা তা জানেন না, তবে আমাকে আমার দায়িত্বটি কিছুটা পরিবর্তন করতে হয়েছিল var authenticationManager = HttpContext.Current.GetOwinContext().Authentication;(বর্তমান যেখানে প্রশ্নটিতে ছিল না সেখানে অন্তর্ভুক্ত)।
অর্টান্ড

177

আমি বিশ্বাস করি আপনি HttpContextযদি নিয়ামকের বাইরে থাকেন তবে আপনাকে বর্তমানের উল্লেখ করতে হবে । এমভিসি নিয়ন্ত্রকদের বর্তমান প্রসঙ্গে একটি বেস রেফারেন্স রয়েছে। তবে এর বাইরেও আপনাকে স্পষ্টভাবে ঘোষণা করতে হবে যে আপনি বর্তমান চানHttpContext

return HttpContext.Current.GetOwinContext().Authentication;

এটি প্রদর্শিত না হওয়া হিসাবে, আপনি উপরে প্রদর্শিত কোডটি ব্যবহার করে একটি নতুন এমভিসি 5 প্রকল্পের টেম্পলেট রয়েছে (দ্য IAuthenticationManager) অ্যাকাউন্ট নিয়ামকের শীর্ষে নীচের ব্যবহার করে বিবৃতি রয়েছে:

using System.Threading.Tasks;
using System.Web;
using System.Web.Mvc;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using Microsoft.Owin.Security;
using WebApplication2.Models;

প্রত্যেককে মন্তব্য করে, এটি প্রদর্শিত হয় GetOwinContext()এটি আসলে সিস্টেম.ওয়েব.এমভিসি সমাবেশের একটি অংশ।


এটি চেষ্টা করে গেছে এবং এটি খুঁজে পাচ্ছে না। - গেটওউইনকন্টেক্সট () মানে।
ড্যারেন ওয়েনরাইট 21

2
@ ড্যারেন - আমি নমুনা টেম্পলেটটি কিছুটা খেলেছি এবং আপনার যে সমাবেশটি অনুপস্থিত তা থাকতে পারে। দেখে মনে হচ্ছে System.Web.Mvcআপনার ক্লাস প্রকল্প থেকে আপনার রেফারেন্স করতে হবে । যখন মন্তব্য করা হয়, এটি HttpContext.GetOwinContext()অজ্ঞাত হয়ে উঠেছে (এবং Microsoft.Owin.Securityসমাবেশ নয়)
টমি

আমি সরাসরি কন্ট্রোলারের উপরও এটি কাজ করার চেষ্টা করছিলাম - এবং এটি আবার খুঁজে পাচ্ছি না।
ড্যারেন ওয়েনরাইট 21

19
এটি আমাকে ছিটকে গেল। একটি পাবলিক সম্পত্তি নেই HttpContextউপর Controllerবর্গ তাই যদি আপনি যে থেকে উত্তরাধিকারী, HttpContext.GetOwinContext()প্রত্যাশিত হিসাবে কাজ করে। ApiControllerযদিও আপনি যদি উত্তরাধিকার সূত্রে পান তবে এ জাতীয় কোনও সম্পত্তি নেই। সুতরাং, HttpContextক্লাসটি উল্লেখ করবে, যা আপনাকে ক্লাসের Currentকোনও উদাহরণ অ্যাক্সেস করার জন্য ব্যবহার করতে হবে । সুতরাং আপনি যদি কোনও কন্ট্রোলার থেকে কোনও এপিআইকন্ট্রোলারে কোড অনুলিপি / পেস্ট করেন এবং কেন এটি কাজ করে না তা ভাবছেন, এটি আপনার জন্য উত্তর।
ডেভিড মিয়াণী

"কারেন্ট" আমার জন্য গ্যাচা ছিল
ক্লিক করুন

24

আমার নিয়ামক এবং Asp.Net টেম্পলেট নিয়ামক এর বিবৃতি ব্যবহার করে তুলনা এবং ত্রুটি পরে

using System.Web;

আমার জন্য সমস্যা সমাধান। আপনি যোগ করতে হবে:

using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;

গেটউজারম্যানেজার পদ্ধতিটি ব্যবহার করতে।

মাইক্রোসফ্ট এটিকে স্বয়ংক্রিয়ভাবে ডান ক্লিক দিয়ে সমাধানের কোনও উপায় খুঁজে পাচ্ছে না এবং বিবৃতি ব্যবহার করে অন্যান্য নিখোঁজদের মতো সমাধান করতে পারে?


1
এটি আমার পক্ষেও কাজ করেছিল। আমার কাছে ইতিমধ্যে আইডেন্টিটি লাইব্রেরি ছিল, তবে এটির জন্য মনে হচ্ছে System.Web।
দক্ষিণশোরাক

1
এটি স্পষ্টতই প্রচুর পরিমাণে ঘোরাফেরা করে আসছে, উভয়ই অ্যাসেমব্লিতে এবং নামস্থানগুলিতে। এটি একটি এক্সটেনশন পদ্ধতি হওয়ায় এটি সত্যই বেদনাদায়ক করে তোলে। আমি আমার সমস্ত গ্রন্থাগার আপডেট করেছি এবং এই উত্তরটি বর্তমানে এটি কোথায় রয়েছে তা প্রতিফলিত করে।
শানোন

আহ, আপনি একটি নতুন আকারে জাহান্নাম করবেন
জাস্টজহান

1
হ্যাঁ, দুঃখের বিষয়, এক্সটেনশন পদ্ধতিগুলি স্বয়ংক্রিয়ভাবে সমাধান করা যায় না।
রোনেন ফেস্টিংগার

22

আমার ক্ষেত্রে মাইক্রোসফ্ট.এস্পনেট.ওয়েবএপিআই.উইন রেফারেন্স যুক্ত করে নুগেটের মাধ্যমে ট্রিকটি করা হয়েছিল।


হ্যাঁ, এটি আমার জন্য বর্তমানের সর্বশেষতম সংস্করণে করেছে। এক্সটেনশন পদ্ধতি এই প্যাকেজ, যা হয় Assemby System.Web.Http.Owin এবং মধ্যে নামস্থান System.Net.Http
oatsoda

16

আপনি নুগেট প্যাকেজটি ইনস্টল করেছেন তা নিশ্চিত করুন Microsoft.AspNet.Identity.Owin। তারপরে System.Net.Httpনেমস্পেস যুক্ত করুন।


আমারও তা ছিল দেখা যাচ্ছে যে আইডেন্টিটি স্টাফ ইনস্টল হওয়ার পরে আর একটি লাইব্রেরি ইনস্টল করা হয়নি।
ড্যারেন ওয়াইনরাইট

@ ড্যারেন দয়া করে প্যাকেজের নাম যুক্ত করুন। আপনাকে ধন্যবাদ
শনি টেকনোলজিস

6
@ স্যাটারটেকনোলজিস আমার কাছে অন্য প্যাকেজটি ছিল মাইক্রোসফট.উইন.হোস্ট.সিস্টেমওয়েব এবং নেমস্পেস সিস্টেম.ওয়েব
ওয়াইসাইকার

1
আমি দ্বিতীয় ওয়াইসিকার। আমার জন্য, এটি কোনও উপকারে আসেনি। ড্যারেনের পরামর্শ ইনস্টল Microsoft.Owin.Host.SystemWebকরার কৌশলটি কার্যকর করেছিল।
সর্বোচ্চ ব্যারাক্লফ

13

শুধু ব্যবহার করছি

HttpContext.Current.GetOwinContext ()

আমার ক্ষেত্রে কৌতুক করেছে।


10

ডেভস ওয়েব এপিআই প্রকল্পে এই ত্রুটি পাওয়ার জন্য -

গেটওউইনকন্টেক্সট এক্সটেনশন পদ্ধতিটি ডেলিতে সংজ্ঞায়িত করা হয়েছে System.Web.Http.Owinএবং আরও একটি প্যাকেজ প্রয়োজন হবে Microsoft.Owin.Host.SystemWeb। এই প্যাকেজটি আপনার প্রকল্পে নুগেট থেকে ইনস্টল করা দরকার।

প্যাকেজের সাথে লিঙ্ক করুন : ওউইন প্যাকেজ ইনস্টল কমান্ড -

Install-Package Microsoft.AspNet.WebApi.Owin    

System.web প্যাকেজের সাথে লিঙ্ক করুন: প্যাকেজ ইনস্টল কমান্ড -

Install-Package Microsoft.Owin.Host.SystemWeb

এই ত্রুটিটি সমাধান করার জন্য আপনাকে এটি অনুসন্ধান করতে হবে যে এটি আপনার ক্ষেত্রে কেন ঘটছে। দয়া করে আপনার কোডের পয়েন্টগুলির নীচে ক্রস করুন -

  1. আপনার অবশ্যই রেফারেন্স থাকতে হবে Microsoft.AspNet.Identity.Owin;

    মাইক্রোসফ্ট.এস্পনেট.আইডেন্টিটি.উইন ব্যবহার করে;

  2. GetOwinContext()নীচে HttpContext.Currentহিসাবে সংজ্ঞায়িত -

     return _userManager1 ?? HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();

    অথবা

    return _signInManager ?? HttpContext.Current.GetOwinContext().Get<ApplicationSignInManager>();

সম্পূর্ণ কোড যেখানে গেটওউইনকন্টেক্সট () ব্যবহৃত হয় -

 public ApplicationSignInManager SignInManager
 {
   get
   {
    return _signInManager ?? HttpContext.Current.GetOwinContext().Get<ApplicationSignInManager>();
   }
    private set
    {
     _signInManager = value;
    }
  }

নামস্থান এর আমি কোডটি ফাইল ব্যবহার করছি যেখানে GetOwinContext () ব্যবহার করা হয়

using AngularJSAuthentication.API.Entities;
using AngularJSAuthentication.API.Models;
using HomeCinema.Common;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Web;
using Microsoft.AspNet.Identity.Owin;
using Microsoft.Owin.Security.DataProtection;

আমার কোডটি আমার এক প্রকল্প থেকে অন্য প্রকল্পে নিয়ে যাওয়ার সময় আমি এই ত্রুটিটি পেয়েছি।


4

এপিআই-তে ইউজারম্যানেজার পেতে

return HttpContext.Current.GetOwinContext().GetUserManager<AppUserManager>();

যেখানে AppUserManager এমন এক শ্রেণি যা ইউজারম্যানেজারের উত্তরাধিকার সূত্রে প্রাপ্ত।


4

আমার কাছে সমস্ত সঠিক প্যাকেজ এবং ইউএসিং ছিল, তবে GetOwinContext()কাজ করার আগে আমাকে প্রথমে তৈরি করতে হয়েছিল ।


আপনার বিল্ডটি এটি প্রথমবার কার্যকর করার জন্য কীভাবে ঠিক করলেন?
Nordes

@ নর্দেস কখনও কখনও ভিএস ব্যাকগ্রাউন্ডে তৈরি করতে ব্যর্থ হয় (যেমন: এটি আপনাকে সঙ্কলনের ত্রুটি রয়েছে বলে জানায়), তবে প্রকৃত বিল্ডটি ট্রিগার করা (বা আরও প্রায়শই পরিষ্কার এবং তারপরে বিল্ড করা) এটি পেয়ে যাবে। কেভিন সম্ভবত এটিই অনুভব করছিলেন।
ম্যাভেরিক

0

এই প্যাকেজটি কেবল ইনস্টল করুন এবং আপনার কোডটি কাজ করবে: => ইনস্টল করুন-প্যাকেজ মাইক্রোসফ্ট.উইন.হোস্ট.সিসটেম ওয়েবে-সংস্করণ ২.১.০

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