
Web.config文件
<connectionStrings> <add name="DefaultConnection" connectionString="data source=MyServer\MyDataBase;initial catalog=ClinicIEl_WebRV_Master;User ID=XXX;Password=XXXX" provIDername="System.Data.sqlClIEnt" /> <add name="ClinicIEl_WebRV_MasterEntitIEs" connectionString="Metadata=res://*/Models.EntitIEs.ClinicIEl_WebRV_Master.csdl|res://*/Models.EntitIEs.ClinicIEl_WebRV_Master.ssdl|res://*/Models.EntitIEs.ClinicIEl_WebRV_Master.msl;provIDer=System.Data.sqlClIEnt;provIDer connection string="data source=MyServer\MyDataBase;initial catalog=ClinicIEl_WebRV_Master;user ID=XXX;password=XXXX;MultipleActiveResultSets=True;App=EntityFramework"" provIDername="System.Data.EntityClIEnt" /> <add name="ClinicIEl_WebRV_EntitIEs" connectionString="Metadata=res://*/Models.EntitIEs.ClinicIEl_WebRV_EntitIEs.csdl|res://*/Models.EntitIEs.ClinicIEl_WebRV_EntitIEs.ssdl|res://*/Models.EntitIEs.ClinicIEl_WebRV_EntitIEs.msl;provIDer=System.Data.sqlClIEnt;provIDer connection string="data source=MyServer\MyDataBase;initial catalog=ClinicIEl_WebRV_DEV;user ID=XXX;password=XXXX;MultipleActiveResultSets=True;App=EntityFramework"" provIDername="System.Data.EntityClIEnt" /> <add name="ClinicIEl_WebRV_Oauth" connectionString="Metadata=res://*/Models.EntitIEs.ClinicIEl_WebRV_Oauth.csdl|res://*/Models.EntitIEs.ClinicIEl_WebRV_Oauth.ssdl|res://*/Models.EntitIEs.ClinicIEl_WebRV_Oauth.msl;provIDer=System.Data.sqlClIEnt;provIDer connection string="data source=MyServer\MyDataBase;initial catalog=ClinicIEl_WebRV_Master;user ID=XXX;password=XXXX;multipleactiveresultsets=True;application name=EntityFramework"" provIDername="System.Data.EntityClIEnt" /> </connectionStrings>
在这里,我使用连接字符串“ClinicIEl_WebRV_Oauth”进行身份验证.
我在启动时配置我的oauthToken
Startup.cs
private voID ConfigureOAuthTokenGeneration(IAppBuilder app) { //// Configure the db context and user manager to use a single instance per request app.CreatePerOwinContext(ApplicationDbContext.Create); app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create); //app.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create); OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions() { //For Dev enviroment only (on production should be AllowInsecurehttp = false) #if DEBUG AllowInsecurehttp = true,#endif TokenEndpointPath = new PathString("/oauth/token"),AccesstokenExpireTimeSpan = TimeSpan.FromDays(1),ProvIDer = new CustomOAuthProvIDer(),AccesstokenFormat = new CustomJwtFormat("http://localhost:55555/") }; // OAuth 2.0 Bearer Access Token Generation app.USEOAuthAuthorizationServer(OAuthServerOptions); } private voID ConfigureOAuthTokenConsumption(IAppBuilder app) { var issuer = "http://localhost:55555/"; string audIEnceID = ConfigurationManager.AppSettings["as:AudIEnceID"]; byte[] audIEnceSecret = TextEnCodings.Base64Url.Decode(ConfigurationManager.AppSettings["as:AudIEnceSecret"]); // API controllers with an [Authorize] attribute will be valIDated with JWT app.UseJwtBearerAuthentication( new JwtBearerAuthenticationoptions { AuthenticationMode = AuthenticationMode.Active,AllowedAudIEnces = new[] { audIEnceID },IssuerSecurityTokenProvIDers = new IISsuerSecurityTokenProvIDer[] { new SymmetricKeyIssuerSecurityTokenProvIDer(issuer,audIEnceSecret) } }); } ApplicationDBContext.cs
using Microsoft.AspNet.IDentity.EntityFramework;using System;using System.linq;using System.Web;using System.Web.Services;using System.Web.SessionState;using WebRV.Models.EntitIEs;namespace WebRV.Infrastructure{ public class ApplicationDbContext : IDentityDbContext<ApplicationUser> //DOIT CREER APPliCATION USER. { public ApplicationDbContext() : base("ClinicIEl_WebRV_Oauth",throwIfV1Schema: false) { Configuration.ProxyCreationEnabled = false; Configuration.LazyLoadingEnabled = false; } [WebMethod(EnableSession = true)] public static ApplicationDbContext Create() { return new ApplicationDbContext(); } }} CustomOAuthProvIDer.cs
using System;using System.linq;using WebRV.Infrastructure;using Microsoft.Owin.Security;using Microsoft.Owin.Security.OAuth;using System.Security.Claims;using System.Threading.Tasks;using Microsoft.AspNet.IDentity.Owin;using System.Web.Mvc;using WebRV.Models.EntitIEs;using System.Net;using System.Web.http;namespace WebRV.ProvIDers{ public class CustomOAuthProvIDer : OAuthAuthorizationServerProvIDer { [ValIDateAntiForgeryToken] public overrIDe Task ValIDateClIEntAuthentication(OAuthValIDateClIEntAuthenticationContext context) { context.ValIDated(); return Task.Fromresult<object>(null); } public overrIDe async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) { var allowedOrigin = "*"; context.OwinContext.Response.headers.Add("Access-Control-Allow-Origin",new[] { allowedOrigin }); var userManager = context.OwinContext.GetUserManager<ApplicationUserManager>(); ApplicationUser user = await userManager.FindAsync(context.Username,context.Password); if (user == null) { context.SetError("invalID_grant","The user name or password is incorrect."); } else { //if (!user.EmailConfirmed) //{ // context.SetError("invalID_grant","User dID not confirm email."); // return; //} ClaimsIDentity oAuthIDentity = await user.GenerateUserIDentityAsync(userManager,"JWT"); var ticket = new AuthenticationTicket(oAuthIDentity,null); context.ValIDated(ticket); } } }} 这是我得到的错误:
The ApplicationUser entity type is not part of the model for the
current context.
这是跟踪:
解决方法 ApplicationUserManager方法在哪里?ligne 32 : var userManager =
context.OwinContext.GetUserManager(); ligne 33
: ligne 34 : ApplicationUser user = await
userManager.FindAsync(context.Username,context.Password); ligne 35 :
ligne 36 : if (user == null)FichIEr source : c:\Users\aboucher\Desktop\WebRV-2016-05-12 –
copIE\ClinicIEl_WebRV\WebRV\WebRV\ProvIDers\CustomOAuthProvIDer.cs
ligne : 34Trace de la pile:
[InvalIDOperationException: Le type d’entité ApplicationUser ne fait
pas partIE du modèle pour le contexte actuel.]
System.Data.Entity.Internal.InternalContext.UpdateEntitySetMapPingsForType(Type
entityType) +4479799
System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type
entityType) +37
System.Data.Entity.Internal.linq.InternalSet1.Initialize() +531.get_InternalContext()
System.Data.Entity.Internal.linq.InternalSet
+16 System.Data.Entity.Infrastructure.Dbquery1.System.linq.Iqueryable.get_ProvIDer()1
+39 System.Data.Entity.queryableExtensions.FirstOrDefaultAsync(Iqueryable
source,Expression1 predicate,CancellationToken cancellationToken)1
+154 System.Data.Entity.queryableExtensions.FirstOrDefaultAsync(Iqueryable
source,Expression1 predicate) +1631.GetResult()
Microsoft.AspNet.IDentity.EntityFramework.<GetUserAggregateAsync>d__6c.MoveNext()
+807 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
task) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDeBUGgerNotification(Task
task) +58 System.Runtime.CompilerServices.TaskAwaiter
+28 Microsoft.AspNet.IDentity.CultureAwaiter1.GetResult() +123 Microsoft.AspNet.IDentity.<FindAsync>d__12.MoveNext() +6011.GetResult()
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
task) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDeBUGgerNotification(Task
task) +58 System.Runtime.CompilerServices.TaskAwaiter
+28 WebRV.ProvIDers.d__0.MoveNext() in c:\Users\aboucher\Desktop\WebRV-2016-05-12 –
copIE\ClinicIEl_WebRV\WebRV\WebRV\ProvIDers\CustomOAuthProvIDer.cs:34
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
task) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDeBUGgerNotification(Task
task) +58 System.Runtime.CompilerServices.TaskAwaiter.GetResult()
+26 Microsoft.Owin.Security.OAuth.d__3f.MoveNext()
+863 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
task) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDeBUGgerNotification(Task
task) +58 System.Runtime.CompilerServices.TaskAwaiter1.GetResult()1.GetResult()
+28 Microsoft.Owin.Security.OAuth.<InvoketokenEndpointAsync>d__22.MoveNext()
+2336 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
task) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDeBUGgerNotification(Task
task) +58 System.Runtime.CompilerServices.TaskAwaiter.GetResult()
+26 Microsoft.Owin.Security.OAuth.<InvokeAsync>d__0.MoveNext() +1733 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
task) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDeBUGgerNotification(Task
task) +58 System.Runtime.CompilerServices.TaskAwaiter
+28 Microsoft.Owin.Security.Infrastructure.d__0.MoveNext() +664 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
task) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDeBUGgerNotification(Task
task) +58 System.Runtime.CompilerServices.TaskAwaiter.GetResult()
+26 Microsoft.AspNet.IDentity.Owin.d__0.MoveNext() +641 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
task) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDeBUGgerNotification(Task
task) +58 System.Runtime.CompilerServices.TaskAwaiter.GetResult()
+26 Microsoft.AspNet.IDentity.Owin.d__0.MoveNext() +641 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
task) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDeBUGgerNotification(Task
task) +58 System.Runtime.CompilerServices.TaskAwaiter.GetResult()
+26 Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.d__5.MoveNext()
+287 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
task) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDeBUGgerNotification(Task
task) +58 System.Runtime.CompilerServices.TaskAwaiter.GetResult()
+26 Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.d__2.MoveNext()
+272 System.Runtime.ExceptionServices.ExceptiondispatchInfo.Throw() +26 Microsoft.Owin.Host.SystemWeb.Infrastructure.ErrorState.Rethrow() +33
Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.StageAsyncResult.End(IAsyncResult
ar) +150
Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.IntegratedPipelineContext.EndFinalWork(IAsyncResult
ar) +42
System.Web.AsyncEventExecutionStep.System.Web.httpApplication.IExecutionStep.Execute()
+380 System.Web.httpApplication.ExecuteStep(IExecutionStep step,Boolean& completedSynchronously) +155
您需要通过传递DbContext来配置应用程序UserManager
public class ApplicationUserManager : UserManager<ApplicationUser>{ public ApplicationUserManager(IUserStore<ApplicationUser> store) : base(store) { } public static ApplicationUserManager Create(IDentityFactoryOptions<ApplicationUserManager> options,IOwinContext context) { var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<EducationContext>())); // Configure valIDation logic for usernames manager.UserValIDator = new UserValIDator<ApplicationUser>(manager) { AllowOnlyAlphanumericUsernames = false,RequireUniqueEmail = true }; // Configure valIDation logic for passwords manager.PasswordValIDator = new PasswordValIDator { requiredLength = 6,RequireNonLetterOrDigit = true,requiredigit = true,RequireLowercase = true,RequireUppercase = true,}; // Configure user lockout defaults manager.UserLockoutEnabledByDefault = true; manager.DefaultAccountLockoutTimeSpan = TimeSpan.FromMinutes(5); manager.MaxFailedAccessAttemptsBeforeLockout = 5; // Register two factor authentication provIDers. This application uses Phone and Emails as a step of receiving a code for verifying the user // You can write your own provIDer and plug it in here. manager.RegisterTwoFactorProvIDer("Phone Code",new PhoneNumberTokenProvIDer<ApplicationUser> { messageformat = "Your security code is {0}" }); manager.RegisterTwoFactorProvIDer("Email Code",new EmailTokenProvIDer<ApplicationUser> { Subject = "Security Code",BodyFormat = "Your security code is {0}" }); manager.EmailService = new EmailService(); manager.SmsService = new SmsService(); var dataProtectionProvIDer = options.DataProtectionProvIDer; if (dataProtectionProvIDer != null) { manager.UserTokenProvIDer = new DataProtectorTokenProvIDer<ApplicationUser>(dataProtectionProvIDer.Create("ASP.NET IDentity")); } return manager; }} 最重要的是写这一行(Create方法中的第一行)
var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<EducationContext>()));总结
以上是内存溢出为你收集整理的c# – 实体类型ApplicationUser不是当前上下文的模型的一部分全部内容,希望文章能够帮你解决c# – 实体类型ApplicationUser不是当前上下文的模型的一部分所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)