2014-04-23 29 views
7

Üretim kodumda, Request.GetOwinContext() öğesinin her zaman null değerini döndürdüğü bir sorun yaşıyoruz.ASP.Net WebAPI OWIN: Neden Request.GetOwinContext() null döndürür?

Ben kurulum sorunu denemek ve izole etmek için küçük bir test WebAPI kontrolörü: İlk başta

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(); 
    } 
} 

Ben eylem yöntemi yukarıdaki çalışan uyumsuz çalışan, ancak sonra bir ilgisi olabileceğini düşündüm, bu döner her iki sürümde de Request.GetOwinContext() öğesi null döndürür.

Microsoft.AspNet.WebApi.Owin.5.1.1 kullanıyorum (GetOwinContext() uzantı yöntemi tanımlanmış gibi görünüyor).

Burada neler olduğu hakkında herhangi bir fikir ???

+0

Başlangıç ​​sınıfının çağrıldığından ve tüm modüllerin kaydedildiğinden emin misiniz? – William

cevap

3

Benzer bir sorunla karşılaştım. ConfigureAuth

stilini Startup.Auth.cs dosyada vardır bu (yöntemiyle CreatePerOwinContext için çağrı ile) hatları aşağıda emin düzeltmek için.

Yöntemin WebAPI proje kök Startup.cs dosyası eksik (özellikle formu ASP.NET MVC4 ve/veya Boş WebAPI Şablon yükselttikten sonra)

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: ""); 
    } 
+0

ApplicationRoleManager dozu mevcut içerikte mevcut değil –

11

Başka bir nedeni gibi görünebilir.

Ayrıca, Microsoft.Owin.Host.SystemWeb paketini yüklediğinizden emin olun.

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); 
     } 
    } 
} 
+4

Düzeltme işlemi, Microsoft ile birlikte Microsoft.Owin.Host.SystemWeb'i Nuget ile kuruyordu. –

+0

benim için sorunu çözmüyor. –

İlgili konular