অনুরোধ.গেটউইনকন্টেক্সট খুঁজে পাচ্ছি না


101

এটি কেন কাজ করছে না তা জানার চেষ্টা করে আমি এক ঘন্টা অনুসন্ধান করছি।

আমার কাছে একটি ওয়েবএসপিআই সহ এএসপি নেট নেট এমভিসি 5 অ্যাপ্লিকেশন রয়েছে। আমি অনুরোধ করার চেষ্টা করছি etগেটউইনকন্টেক্সট ()। প্রমাণীকরণ, তবে আমি কীভাবে উইটওউনকন্টেক্সট অন্তর্ভুক্ত করব তা খুঁজে পাচ্ছি না। আমার কোডটি এখানে:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;
using TaskPro.Models;

namespace TaskPro.Controllers.api
{
    public class AccountController : ApiController
    {
        [HttpPost]
        [AllowAnonymous]
        public ReturnStatus Login(LoginViewModel model)
        { 
            if (ModelState.IsValid)
            {
                var ctx = Request.GetOwinContext(); // <-- Can't find this

                return ReturnStatus.ReturnStatusSuccess();
            }

            return base.ReturnStatusErrorsFromModelState(ModelState);
        }
    }
}

আমি যা পড়েছি তা থেকে এটি System.Net.Http এর অংশ হওয়া উচিত, তবে আমি এটি অন্তর্ভুক্ত করেছি এবং এটি এখনও সমাধান হচ্ছে না। Ctrl- স্পেস আমাকে কোনও বুদ্ধিমান বিকল্প দেয় না।

আমি এখানে কি মিস করছি?


এটি System.Web.Httpনেমস্পেসে, তবে এটি System.Web.Http.Owinডেল থেকে । আপনি কি রেফারেন্স দিয়েছেন?
সাইমন সি

ঠিক আছে, আমি মাইক্রোসফ্ট.এস্পনেট.ওয়েবএপি.অউইনের জন্য নুগেট প্যাকেজটি পেয়েছি এবং এটি ইনস্টল করেছি এবং এর মধ্যে System.Web.Http এবং System.Web.Http.Owin এর ব্যবহারগুলি অন্তর্ভুক্ত করা হয়েছে তবে এটি এখনও কাজ করছে না।
স্কটি

2
দুঃখিত, আমার উপরের মন্তব্যে System.Net.Httpনেমস্পেস পড়তে হবে । তাই আপনার জন্য একটি ব্যবহার প্রয়োজন হবে না .Owin, শুধু using System.Net.Httpযদি আপনি ইতিমধ্যেই আছে পারে।
সাইমন সি

উত্তর:


163

GetOwinContextএক্সটেনশন পদ্ধতি রয়েছে System.Web.Http.OwinDll যা একটি nuget প্যাকেজ হিসাবে ডাউনলোড করা প্রয়োজন (nuget প্যাকেজের নাম Microsoft.AspNet.WebApi.Owin হয়)

Install-Package Microsoft.AspNet.WebApi.Owin

এখানে এমএসডিএন দেখুন: http://msdn.microsoft.com/en-us/library/system.net.http.owinhttprequestmessageextensions.getowinintext(v=vs.118).aspx

নিউজ প্যাকেজটি এখানে: https://www.nuget.org/packages/Mic Microsoft.AspNet.WebApi.Owin

তবে, পদ্ধতিটি এখনও System.Net.Httpনামের জায়গার অংশ , সুতরাং আপনার যে usingসংজ্ঞাগুলি রয়েছে তা ঠিক হওয়া উচিত।

সম্পাদনা

ঠিক আছে, কিছু বিভ্রান্তি দূর করতে: আপনি যদি কোনও এপিআইকন্ট্রোলার ব্যবহার করেন (যেমন MyController : ApiController) আপনার Microsoft.AspNet.WebApi.Owinপ্যাকেজটি প্রয়োজন require

আপনি যদি নিয়মিত এমভিসি কন্ট্রোলার (যেমন MyController : Controller) ব্যবহার করেন তবে আপনার Microsoft.Owin.Host.SystemWebপ্যাকেজটি দরকার হবে ।

এমভিসি 5 এ অপি এবং নিয়মিত এমভিসির পাইপলাইনগুলি খুব আলাদা ছিল তবে প্রায়শই একই নামকরণের সম্মেলন থাকে। সুতরাং একের মধ্যে একটি এক্সটেনশন পদ্ধতি অন্যটির জন্য প্রযোজ্য নয়। অ্যাকশন ফিল্টার ইত্যাদির জন্য একই etc.


দ্বিতীয় লিঙ্কটি আমার পক্ষে কাজ করেছিল। আপনার প্যাকেজ ম্যানেজারে কেবল ইনস্টল-প্যাকেজ মাইক্রোসফ্ট.এএসপনেট.উইবএপিআই.উইন চালান।
রোগালা

টোকেন প্রত্যাহার খুব শক্ত !!! তবে এই উত্তরটি অবশেষে আমাকে এটি কাজ করতে সহায়তা করেছে (প্লাস ম্যানুয়ালি এটি ডিবি থেকে মুছে ফেলা হয়েছে, যার কাছে আমার অ্যাক্সেস রয়েছে)। ধন্যবাদ!!
স্লিমসহোস্ট

আমার এই সমস্যাটিও রয়েছে তবে আমি ইস্যু-প্যাকেজ মাইক্রোসফ্ট ব্যবহার করেছি
winউইন.হোস্ট.সিসটেম ওয়েব

1
কেন এটি সঠিক বলে মনে করা হচ্ছে তা পাই না - এই এক্সটেনশন পদ্ধতির ওয়েবএপিআইয়ের সাথে কোনও সম্পর্ক নেই, এবং প্রকৃতপক্ষে এটি রয়েছে Microsoft.Owin.Host.SystemWeb, না Microsoft.AspNet.WebApi.Owin
জন

2
@ জন - আপনি যদি কোনও এপিআই নিয়ন্ত্রণকারী ব্যবহার করেন তবে আপনার প্রয়োজন Microsoft.AspNet.WebApi.Owin। আপনি যদি নিয়মিত এমভিসি নিয়ন্ত্রকের মধ্যে থাকেন তবে আপনার প্রয়োজন হবে Microsoft.Owin.Host.SystemWebRequestবস্তুর উপর নির্ভর করে কন্ট্রোলার আপনি এখন একটি ভিন্ন এক্সটেনশন পদ্ধতি ব্যবহার করছেন টাইপ ভিন্ন।
সাইমন সি

49

এগুলির কোনওটিই আমার পক্ষে কাজ করেনি। আমাকে পরিচয়ের সাথে তৈরি করা একের সাথে নুগেট প্যাকেজগুলির তুলনা করতে হয়েছিল এবং আমি খুঁজে পেয়েছি এই নুগেট প্যাকেজটি অনুপস্থিত যা যুক্ত করার পরে আমার জন্য সমস্যাটি সংশোধন করা হয়েছে

Microsoft.Owin.Host.SystemWeb

স্পষ্টতই আপনার এএসপি.এনইটি অনুরোধ পাইপলাইন ব্যবহার করে আইআইএস-এ ওউইন চালানো দরকার (পড়ুন এটি ছাড়া আপনি ক্ষতিগ্রস্থ হন!)


2
আপনাকে আইআইএস চালাতে হবে না।
ট্রেভর ডি কোয়েকোয়েক

1
@ ট্রেভার্ডকোয়েকোইক হ্যাঁ তবে আপনি যদি মন্তব্যটি সঠিকভাবে পড়ে থাকেন তবে এতে বলা হয়েছে আপনার আইআইএস চালানোর জন্য লাইব্রেরি দরকার (আপনি যদি আইআইএসে চালাতে চান তবে আপনি এই লাইব্রেরিটি ছাড়া করতে পারবেন না)
ওবি

1
আপনার সেই প্যাকেজটি প্লাস্টিকটি সিস্টেম ব্যবহার করে দরকার e বিবৃতি।
মুরারিউ সার্বান

এটি আমার জন্য বিষয়টি স্থির করেছে। ধন্যবাদ!
আর্টোরিয়াস 2718

45

WEB API- এ, আপনি নিম্নলিখিতটি ব্যবহার করে রেফারেন্স পেতে পারেন:

HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();

এটি আইডেন্টিটি ২.০ এ কাজ করে


5
-1 এর জন্য System.Web এর উপর নির্ভরতা প্রয়োজন, যা স্ব-হোস্ট করা পরিস্থিতিতে উপলব্ধ নয়।
কুগেল

6
এত কিছুর পরেও, মানুষ এখনও এইচটিটিপি কনটেক্সট.কন্টেন ব্যবহার করছে? এটি পরীক্ষাযোগ্য নয়। প্রসঙ্গ ইনজেকশন করা উচিত।
ট্রেভর ডি কোয়েকোয়েক

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

21

Microsoft.Owin.Host.SystemWebএটি করার জন্য আপনাকে নিউগেট প্যাকেজ যুক্ত করতে হতে পারে :

HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();

7

আমার ক্ষেত্রে আমার যুক্ত করা দরকার

using Microsoft.AspNet.Identity.Owin;

নীচের লাইনে গেটউইনকন্টেক্সট এবং তারপরে গেটউজারম্যানেজার সমাধান করার জন্য।

Request.GetOwinContext().GetUserManager<ApplicationUserManager>();

5

আমার এই সমস্যাটি রয়েছে এবং আমি আমার সমস্যা সমাধানের জন্য নুগেট থেকে অতিরিক্ত প্যাকেজ ডাউনলোড করি, (প্যাকেজ ম্যানেজার কনসোলে নিম্নলিখিত কমান্ডটি চালান) ইনস্টল-প্যাকেজ মাইক্রোসফট.উইন.হোস্ট.সিস্টেমওয়েব


1
এটি আমার জন্যও সমাধান ছিল - ফ্রেমওয়ার্ক 4.6.2 কনসোল অ্যাপ
সেরেএক্সএক্স

2

এটি একটি সহজ উত্তর খুঁজতে আমাকে চিরকালের জন্য নিয়ে গেছে: তবে আমি যা করলাম তা আইওউইনকন্টেক্সট-এর একক উদাহরণের গেট এক্সটেনশনটি ব্যবহার করছিল যা শুরুতে ইনস্ট্যান্ট করা হয়েছিল। সুতরাং এটি এভাবে প্রকাশিত হয়েছিল:

private readonly IOwinContext _iOwinContext = HttpContext.Current.GetOwinContext();

public ApplicationUserManager UserManager
    {
        get
        {
            return _userManager ?? _iOwinContext.Get<ApplicationUserManager>() ;
        }
        private set
        {
            _userManager = value;
        }
    }

1

GetOwinContext()এক্সটেনশন পদ্ধতি গুই থ্রেড ছাড়া অন্য থ্রেডের মধ্যে পাওয়া যায় না।

সুতরাং কোনও awaitএড ফাংশন থেকে এই ফাংশনটি কল না করার জন্য সাবধান হন ।


1

এএসপি.নেট ডিফল্ট প্রকল্পটি দেখার পরে আমি আবিষ্কার করেছি যে এটি আমার অ্যাপ্লিকেশন শুরুতে অন্তর্ভুক্ত করা দরকার:

// Enable the application to use a cookie to store information for the signed in user
// and to use a cookie to temporarily store information about a user logging in 
// with a third party login provider
app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);`

1

আমি প্যাকেজটি অনুপস্থিত: মাইক্রোসফ্ট.এএসপনেট.উইবএপি.আইউই এপিআইকন্ট্রোলারদের পক্ষে। আশাকরি এটা সাহায্য করবে!


1

আমার একই সমস্যা ছিল এবং একটি ব্যক্তিগত পদ্ধতি ব্যবহার করে এটি সমাধান করা হয়েছে: private IAuthenticationManager AuthenticationManager { get { return HttpContext.Current.GetOwinContext().Authentication; } }

এটি আমার জন্য সাঁতার কাটিয়ে কাজ করেছে।


1

(দয়া করে নোট করুন যে এই উত্তরটি এএসপি.নেট ওয়েব এপিআই-এর জন্য যা প্রশ্নটিতে ব্যবহৃত ট্যাগের সাথে মিলে যায়। আপনার জিজ্ঞাসাবাদটি যদি এএসপি.নেট এমভিসি সম্পর্কিত হয় তবে এই প্রশ্নটি দেখুন ))

এএসপি.নেট ওয়েব এপিআই পরিষেবাটি কীভাবে হোস্ট করা হবে তা প্রশ্ন নির্দিষ্ট করে না । মধ্যে ডায়ালগ পোস্টটি ইঙ্গিত (জোর খনি):

কিচল্লা লিখেছেন 24 অক্টোবর, 2014 1:30 এএম

আপনি যদি স্ব-হোস্টিং না হন তবে মাইক্রোসফ্ট.এএসপনেট.ওয়েবএপি.অউইন প্যাকেজটি আইআইএস ব্যবহার করবেন না ... এই প্যাকেজটি কেবল স্ব-হোস্টিংয়ের সাথেই ব্যবহৃত হবে বলে মনে করা হচ্ছে ।

Microsoft.AspNet.WebApi.Owinপ্যাকেজটির ব্যবহার গৃহীত উত্তরে প্রস্তাবিত । এই উত্তরে আমি আইআইএসে একটি এএসপি.নেট ওয়েব এপিআই পরিষেবা হোস্ট করার সময় আমার জন্য কী কাজ করেছে তা জানাচ্ছি ।

প্রথমে নিম্নলিখিত নিউগেট প্যাকেজটি ইনস্টল করুন:

Microsoft.Owin.Host.SystemWeb

OWIN সার্ভার যা OWIN- ভিত্তিক অ্যাপ্লিকেশনগুলিকে ASP.NET অনুরোধ পাইপলাইন ব্যবহার করে আইআইএসে চালনা করতে সক্ষম করে।

(মনে রাখবেন যে আমি যেমন লিখছি, এই নুগেট প্যাকেজের সর্বশেষ উপলব্ধ সংস্করণটি 3.1.0 Also এছাড়াও, যত পরিমাণে এটি বিবেচ্য হতে পারে, আমি ভিজুয়াল স্টুডিও 2013 আপডেট 5 ব্যবহার করছি)

এই নিউগেট প্যাকেজটি ইনস্টল করার পরে, আপনি নিম্নলিখিতগুলি করতে পারেন:

using Microsoft.Owin;
using System.Web;

IOwinContext context = HttpContext.Current.GetOwinContext();
// or
IOwinContext context = HttpContext.Current.Request.GetOwinContext();

এখন, কীভাবে এই বিবৃতিগুলি সমাধান করা হয় সে সম্পর্কে কিছুটা আলোকপাত করা। ভিজ্যুয়াল স্টুডিওতে, আপনি যদি GetOwinContextবিবৃতিতে ডান ক্লিক করেন এবং "পিক সংজ্ঞা" নির্বাচন করেন, তবে ভিজ্যুয়াল স্টুডিওগুলি নিম্নলিখিতটি প্রদর্শন করবে:

// Assembly Microsoft.Owin.Host.SystemWeb.dll, v3.1.0.0

using Microsoft.Owin;
using System;
using System.Runtime.CompilerServices;

namespace System.Web
{
    public static class HttpContextExtensions
    {
        public static IOwinContext GetOwinContext(this HttpContext context);
        public static IOwinContext GetOwinContext(this HttpRequest request);
    }
}

আপনি দেখতে পাচ্ছেন, System.Webনেমস্পেসের মধ্যে দুটি GetOwinContext এক্সটেনশন পদ্ধতি রয়েছে:

  • একদিন HttpContextবর্গ, এবং
  • অন্যান্য HttpRequestবর্গ।

আবার, আইআইএসে যারা তাদের ওয়েব এপিআই পরিষেবাটি হোস্ট করছেন তাদের জন্য, আমার আশা এই যে এই GetOwinContext2017 সালের শেষের তারিখের সাথে কোনও সংজ্ঞা পাওয়া যাবে সে সম্পর্কিত কোনও অস্পষ্টতা পরিস্কার করে ।


0

আমাকে প্যাকেজ যোগ করতে হয়েছিল Microsoft.AspNet.Identity.Owin

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