ASP.Net WebAPI OWIN: Why does Request.GetOwinContext () return null?

There is a problem in my production code when Request.GetOwinContext () always returns null.

I am setting up a small WebAPI test controller to try to isolate the problem:

public class TestController : ApiController { [HttpGet] public async Task<IHttpActionResult> GetAsyncContext(string provider) { if (HttpContext.Current.GetOwinContext() == null) return this.BadRequest("No HttpContext.Current Owin Context"); if (Request.GetOwinContext() == null) return this.BadRequest("No Owin Context"); return this.Ok(); } [HttpGet] public IHttpActionResult GetContext(string provider) { if (HttpContext.Current.GetOwinContext() == null) return this.BadRequest("No HttpContext.Current Owin Context"); if (Request.GetOwinContext() == null) return this.BadRequest("No Owin Context"); return this.Ok(); } } 

At first I thought that this might have something to do with the action method that is executed asynchronously, but after doing the above it turns out that in both versions of Request.GetOwinContext () returns null.

I am using Microsoft.AspNet.WebApi.Owin.5.1.1 (which seems to be determined by the GetOwinContext () extension method).

Any ideas on what's going on here ???

+7
asp.net-web-api owin
source share
2 answers

Another reason (especially after updating the ASP.NET MVC4 form and / or the empty WebApi template) is that the Startup.cs file is missing in the root directory of the WebAPI project.

Also, make sure you install the Microsoft.Owin.Host.SystemWeb package.

 using System; using System.Collections.Generic; using System.Linq; using Microsoft.Owin; using Owin; [assembly: OwinStartup(typeof(TestMVC5.Startup))] namespace TestMVC5 { public partial class Startup { public void Configuration(IAppBuilder app) { ConfigureAuth(app); } } } 
+11
source share

I ran into a similar problem. To fix this, make sure that the lines below (with the CreatePerOwinContext method call ) are in the Startup.Auth.cs file in ConfigureAuth

method.

Your method may look like

  public void ConfigureAuth(IAppBuilder app) { // Configure the db context, user manager and role manager to use a single instance per request app.CreatePerOwinContext(ApplicationDbContext.Create); app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create); app.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create); app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create); // 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 // Configure the sign in cookie app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, LoginPath = new PathString("/Account/Login"), Provider = new CookieAuthenticationProvider { // Enables the application to validate the security stamp when the user logs in. // This is a security feature which is used when you change a password or add an external login to your account. OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>( validateInterval: TimeSpan.FromMinutes(30), regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)) } }); app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); // Enables the application to temporarily store user information when they are verifying the second factor in the two-factor authentication process. app.UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie, TimeSpan.FromMinutes(5)); // Enables the application to remember the second login verification factor such as phone or email. // Once you check this option, your second step of verification during the login process will be remembered on the device where you logged in from. // This is similar to the RememberMe option when you log in. app.UseTwoFactorRememberBrowserCookie(DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie); // Uncomment the following lines to enable logging in with third party login providers //app.UseMicrosoftAccountAuthentication( // clientId: "", // clientSecret: ""); //app.UseTwitterAuthentication( // consumerKey: "", // consumerSecret: ""); //app.UseFacebookAuthentication( // appId: "", // appSecret: ""); //app.UseGoogleAuthentication( // clientId: "", // clientSecret: ""); } 
+3
source share

All Articles