HttpContext.GetOwinContext()不包含GetOwinContext()的定义?

问题描述 投票:-1回答:2

我的控制器上出现此错误,'HttpContextBase不包含GetOwinContext的定义,并且没有可访问的扩展方法GetOwinContext接受类型为HttpContextBase的第一个参数”。问题是我现在该如何解决这个问题?命名空间和程序集已在下面定义。我应该做些其他事情来避免此错误吗?请指教并进一步帮助我,谢谢。

 // ManageController.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using System.Threading.Tasks;
    using Microsoft.AspNet.Identity;
    using Microsoft.AspNet.Identity.Owin;
    using Microsoft.Owin.Security;
    using eNtsaTrainingRegistration.Models;

    namespace eNtsaTrainingRegistration.Controllers
    {
        [Authorize]
        public class ManageController : AppBaseController
        {
            private ApplicationSignInManager _signInManager;
            private ApplicationUserManager _userManager;
            private ApplicationRoleManager _roleManager;

            // default constructor.

            public ManageController()
            {

            }
            public ManageController(ApplicationSignInManager signInManager, ApplicationUserManager userManager, ApplicationRoleManager roleManager)
            {
                UserManager = userManager;
                SignInManager = signInManager;
                AppRoleManager = roleManager;
            }
            public ApplicationUserManager UserManager
            {
                get
                {
                    return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>()// Error is here;
                }
                private set
                {
                    _userManager = value;
                }
            }

            public ApplicationRoleManager AppRoleManager
            {
                get
                {
                    return _roleManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationRoleManager>();
                }
            }


        }


    }

//IdentityConfig.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Data.Entity;
    using System.Security.Claims;
    using System.Threading.Tasks;
    using Microsoft.AspNet.Identity;
    using Microsoft.AspNet.Identity.EntityFramework;
    using Microsoft.AspNet.Identity.Owin;
    using Microsoft.Owin;
    using Microsoft.Owin.Security;
    using System.Net.Mail;
    using System.Net;
    using System.Web.Configuration;
    using eNtsaTrainingRegistration.Models;

    namespace eNtsaTrainingRegistration
    {
        public class EmailService : IIdentityMessageService
        {
            public Task SendAsync(IdentityMessage message)
            {
                var mailMessage = new MailMessage();
                mailMessage.To.Add(new MailAddress(message.Destination));
                mailMessage.From = new MailAddress("Gcobani Mkontwana <[email protected]>");
                mailMessage.Subject = message.Subject;
                mailMessage.IsBodyHtml = true;
                mailMessage.Body = message.Body;

                using (var smtp = new SmtpClient())
                {
                    var credential = new NetworkCredential
                    {
                        UserName = WebConfigurationManager.AppSettings["UserName"],
                        Password = Helper_b.Decrypt(WebConfigurationManager.AppSettings["UserPassword"])
                    };
                    smtp.Credentials = credential;
                    smtp.Host = WebConfigurationManager.AppSettings["SMTPName"];
                    smtp.Port = int.Parse(WebConfigurationManager.AppSettings["SMTPPort"]);
                    smtp.EnableSsl = true;
                    smtp.Send(mailMessage);
                }
                return Task.FromResult(0);
            }
        }

        public class SmsService : IIdentityMessageService
        {
            public Task SendAsync(IdentityMessage message)
            {
                return Task.FromResult(0);
            }
        }
        // add another method here.
        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<ApplicationDbContext>()));
                // 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;
            }
        }
        // SignInManager class.
        public class ApplicationSignInManager : SignInManager<ApplicationUser, string>
        {
            public ApplicationSignInManager(ApplicationUserManager userManager, IAuthenticationManager authenticationManager)
            : base(userManager, authenticationManager)
            {
            }

            public override Task<ClaimsIdentity> CreateUserIdentityAsync(ApplicationUser user)
            {
                return user.GenerateUserIdentityAsync((ApplicationUserManager)UserManager);
            }

            public static ApplicationSignInManager Create(IdentityFactoryOptions<ApplicationSignInManager> options, IOwinContext context)
            {
                return new ApplicationSignInManager(context.GetUserManager<ApplicationUserManager>(), context.Authentication);
            }
        }
        public class ApplicationRoleManager:RoleManager<IdentityRole>
        {
            public ApplicationRoleManager(IRoleStore<IdentityRole, string> roleStore)
                :base(roleStore)
            {

            }
            public static ApplicationRoleManager Create(IdentityFactoryOptions<ApplicationRoleManager> options, IOwinContext context)
            {
                var appRoleManager = new ApplicationRoleManager(new RoleStore<IdentityRole>(context.Get<ApplicationDbContext>()));

                return appRoleManager;
            }
        }
    }
c# asp.net-mvc
2个回答
0
投票

GetOwinContextHttpContext的扩展名,而不是HttpContextBase。试试这个:

HttpContext.ApplicationInstance.Context.GetOwinContext()...

0
投票

Install-Package Microsoft.Owin.Host.SystemWeb

© www.soinside.com 2019 - 2024. All rights reserved.