418

I have downloaded, and successfully ran the ASP.NET Identity sample from here: https://github.com/rustd/AspnetIdentitySample

I am now in the middle of implementing the ASP.NET Identity framework in my project and have ran into a problem, that has driven me mad all day...

GetOwinContext() does not exist as an extension method on my HttpContext

I am implementing the identity framework in class library. I have installed all the latest (pre-release version) of the Identity framework and everything - apart from this - is working fine.

I have tried implementing the same code as the same direct in my controller, and find the same problem.

I'm clearly missing a reference somewhere, though I have no idea what..!..

The code-block that is killing me is:

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

I have added references to the following - tried these both in my class library and also direct on the controller, none of them work for me...

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

... this is driving me up the wall....any idea?

UPDATE

I have checked the versions of Identity & OWIN in the sample, and I have made sure I have the same versions in my solution.

More so, if I search the object browser on the sample for GetOwinContext I can find the method, however when I search for it in my solution it is nowhere to be found... I must have some library out of date, but I can't find it!

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Darren Wainwright
  • 30,247
  • 21
  • 76
  • 127

10 Answers10

760

ARGH!

I found it... I didn't have an extra package, called Microsoft.Owin.Host.SystemWeb

Once i searched and installed this, it worked.

Now - i am not sure if i just missed everything, though found NO reference to such a library or package when going through various tutorials. It also didn't get installed when i installed all this Identity framework... Not sure if it were just me..

EDIT Although it's in the Microsoft.Owin.Host.SystemWeb assembly it is an extension method in the System.Web namespace, so you need to have the reference to the former, and be using the latter.

PeteGO
  • 5,597
  • 3
  • 39
  • 70
Darren Wainwright
  • 30,247
  • 21
  • 76
  • 127
  • 6
    Thanks for figuring that one out: I'm using this tutorial http://www.asp.net/identity/overview/getting-started/adding-aspnet-identity-to-an-empty-or-existing-web-forms-project and it's a missing step – frenchie Mar 01 '14 at 12:31
  • Seems it's in there now - either that or we both missed it before :) – Darren Wainwright Mar 10 '14 at 12:49
  • Instead of running around aimlessly, installing random libraries and expecting tutorials to be reference documentation, one should rather [lookup the method in the actual reference](http://msdn.microsoft.com/en-us/library/dn270723), then follow the link [to its class](http://msdn.microsoft.com/en-us/library/system.web.httpcontextextensions) (on the left). Then, it's right in front of you: `Assembly: Microsoft.Owin.Host.SystemWeb (in Microsoft.Owin.Host.SystemWeb.dll)`. Literally one click. – tne Mar 27 '14 at 09:17
  • 24
    @tne - thank you for your comment... though I was hardly 'running around aimlessly' - i was following a tutorial from a trusted resource; from the asp.net site no-less. They didn't have that step in their tutorial (it's since been added) - also, the fact people are upvoting both this answer and the original Q also goes to indicate that I wasn't the only one with this issue. – Darren Wainwright Mar 27 '14 at 12:54
  • 6
    @Darren, fair enough. (I do realize I could have worded that differently.) – tne Mar 27 '14 at 15:55
  • 3
    Just for reference: https://www.nuget.org/packages/Microsoft.Owin.Host.SystemWeb/2.1.0 – Chris Bohatka Apr 21 '14 at 14:42
  • 2
    You also need the `using System.Web;` statement – hofnarwillie Feb 12 '15 at 13:20
  • None of the receipts here did help me so far :( – decades Mar 06 '15 at 12:43
  • Thanks for this!! I've probably been following the same tutorials as you and they don't always include everything you need! – Phil Apr 10 '15 at 10:12
  • 1
    This is _EXACTLY_ why I hate extension methods, having to have *just the right namespace* in your using statements – enorl76 Oct 23 '15 at 00:44
  • 1
    using Microsoft.AspNet.Identity.Owin; i missed this one. GOD i have started to hate extension methods. – Ali Umair Nov 18 '15 at 13:35
  • 1
    There seems to be a new wrinkle in the elusive `GetOwinContext()` extension method. The method, as defined in the `Microsoft.Owin.Host.Systemweb` assembly, as referenced above, is an extension of the `HttpContextBase` class. It appears that the new Controller in `Microsoft.AspNet.Mvc v6.0.0-rc1` new returns `HttpContext` instead of the `HttpContextBase`. – Vinney Kelly Dec 23 '15 at 14:48
  • 2
    Referencing Microsoft.Owin.Host.SystemWeb didn't do it for me. I'm using Owin 3.0.1. What fixed it though was referencing System.Web.Http.Owin in the project references. – Nick Jul 13 '16 at 15:50
  • Makes rolling your own simple authentication seem like a great idea – niico Feb 06 '17 at 08:13
  • Nice work, just need to find for "Microsoft.Owin.Host.SystemWeb" in nuget and install it. What a shame Microsoft tutorial itself didn't point that out. – TPG Jun 01 '17 at 07:34
  • 7
    Don't know if it was from updating this reference, but I had to change up my assignment a little bit to `var authenticationManager = HttpContext.Current.GetOwinContext().Authentication;` (Current included where it wasn't there in the question). – Ortund Feb 23 '18 at 07:46
  • @Ortund - yes, I think for web forms this is what you need to do, the one without seems to be for MVC – Mike May 09 '18 at 15:21
  • Worked for me too – Praveen Kumar Rejeti Aug 14 '18 at 13:10
  • Installing this Microsoft.Owin.Host.SystemWeb package also solved my problem with my error "getowincontext is not a member of system.web.httpcontext" but I was getting a Nuget errors trying to install it To get it installed, I first changed my target .NET Framework to 4.5.1 or higher** and then Nuget installed Microsoft.Owin.Host.SystemWeb just fine (** My original project targeted .NET Framework 4.5.0 and Microsoft.Owin.Host.SystemWeb would not install for me on 4.5.0.) – Jeff Mergler Oct 05 '18 at 17:34
  • 1
    Why is this so messy – Rei Miyasaka May 29 '20 at 05:55
185

I believe you need to reference the current HttpContext if you are outside of the controller. The MVC controllers have a base reference to the current context. However, outside of that, you have to explicitly declare you want the current HttpContext

return HttpContext.Current.GetOwinContext().Authentication;

As for it not showing up, a new MVC 5 project template using the code you show above (the IAuthenticationManager) has the following using statements at the top of the account controller:

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;

Commenting out each one, it appears the GetOwinContext() is actually a part of the System.Web.Mvc assembly.

Tommy
  • 39,592
  • 10
  • 90
  • 121
  • Been trying this and just can't find it. - the GetOwinContext() i mean. – Darren Wainwright Jan 15 '14 at 21:13
  • 2
    @Darren - I played with the sample template a little bit and may have the assembly you are missing. Looks like you will need to reference `System.Web.Mvc` from your class project. When commented out, that is what made `HttpContext.GetOwinContext()` become unknown (and not the `Microsoft.Owin.Security` assembly) – Tommy Jan 15 '14 at 21:21
  • I've been trying to get this to work directly on a controller too - and again can't find it. – Darren Wainwright Jan 15 '14 at 21:26
  • 21
    This tripped me up. There is a public property `HttpContext` on the `Controller` class, so if you inherit from that, `HttpContext.GetOwinContext()` works as expected. If you inherit from `ApiController` though, there is no such property. Therefore, `HttpContext` will refer to the class, which will require you to use `Current` to access an instance of the class. So if you copy/paste code from a Controller to an ApiController and wonder why it doesn't work, this is the answer for you. – David Miani Jun 30 '14 at 00:56
  • "Current" was the gotcha for me – Click Ok Feb 03 '17 at 00:17
  • This did it for me! Thx – Alexandre Mar 15 '18 at 19:38
  • I have a Web Site not MVC and adding Current was enough to solve the problem. Thank you. – Dov Miller Aug 30 '18 at 08:53
  • `HttpContext.Current` does not exist anymore. – eggsloveoats Sep 30 '22 at 01:11
24

After trial and error comparing the using statements of my controller and the Asp.Net Template controller

using System.Web;

Solved the problem for me. You are also going to need to add:

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

To use GetUserManager method.

Microsoft couldn't find a way to resolve this automatically with right click and resolve like other missing using statements?

Ronen Festinger
  • 2,260
  • 1
  • 23
  • 32
22

In my case adding Microsoft.AspNet.WebApi.Owin reference via nuget did the trick.

DolceVita
  • 2,090
  • 1
  • 23
  • 35
  • Yes, this did it for me on the current latest version. The extension method is in this Package, which is _Assemby_ **System.Web.Http.Owin** and within the _Namespace_ **System.Net.Http** – oatsoda Aug 09 '16 at 07:40
16

Make sure you installed the nuget package Microsoft.AspNet.Identity.Owin. Then add System.Net.Http namespace.

Syed Ali hassan
  • 596
  • 4
  • 16
CodeNotFound
  • 22,153
  • 10
  • 68
  • 69
16

Just using

HttpContext.Current.GetOwinContext()

did the trick in my case.

Honza P.
  • 1,165
  • 1
  • 11
  • 12
14

For Devs getting this error in Web API Project -

The GetOwinContext extension method is defined in System.Web.Http.Owin dll and one more package will be needed i.e. Microsoft.Owin.Host.SystemWeb. This package needs to be installed in your project from nuget.

Link To Package: OWIN Package Install Command -

Install-Package Microsoft.AspNet.WebApi.Owin    

Link To System.web Package : Package Install Command -

Install-Package Microsoft.Owin.Host.SystemWeb

In order to resolve this error you need to find why its occurring in your case. Please Cross check below points in your code -

  1. You must have reference to Microsoft.AspNet.Identity.Owin;

    using Microsoft.AspNet.Identity.Owin;

  2. Define GetOwinContext() Under HttpContext.Current as below -

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

    OR

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

Complete Code Where GetOwinContext() is used -

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

Namespace's I'm Using in Code File where GetOwinContext() Is used

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;

I got this error while moving my code from my one project to another.

Heemanshu Bhalla
  • 3,603
  • 1
  • 27
  • 53
5

To get UserManager in API

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

where AppUserManager is the class that inherits from UserManager.

Ashraf Maher
  • 81
  • 1
  • 7
4

I had all the correct packages and usings, but had to built first before I could get GetOwinContext() to work.

CodeNotFound
  • 22,153
  • 10
  • 68
  • 69
Kevin Raffay
  • 842
  • 5
  • 18
  • How did you fix your build to make it works the first time? – Nordes Dec 28 '15 at 07:54
  • @Nordes Sometimes VS fails to build in the background (ie: it tells you there are compile errors), but triggering a real build (or more often clean and then build) will get it through. That's likely what Kevin was experiencing. – Maverick Aug 10 '16 at 06:27
4

Just install this package and your code will work:=> Install-Package Microsoft.Owin.Host.SystemWeb -Version 2.1.0

Muhammad Ayyaz
  • 11
  • 1
  • 14