ASP.NET Core Identity UserManager<ApplicationUser> -Error 没有为此对象定义无参数构造函数

Posted

技术标签:

【中文标题】ASP.NET Core Identity UserManager<ApplicationUser> -Error 没有为此对象定义无参数构造函数【英文标题】:ASP.NET Core Identity UserManager<ApplicationUser> -Error No parameterless constructor defined for this object 【发布时间】:2018-07-31 17:31:54 【问题描述】:

我只是在尝试开发一个用于身份验证和授权的示例项目,并点击链接

ASP.NET Core MVC: Authentication and Role Based Authorisation with Identity

运行代码时出现错误

堆栈跟踪:

[MissingMethodException: 没有为此定义无参数构造函数 对象。] System.RuntimeTypeHandle.CreateInstance(RuntimeType 类型, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) +0 System.RuntimeType.CreateInstanceSlow(布尔 publicOnly,布尔 skipCheckThis、布尔填充缓存、StackCrawlMark 和 stackMark)+119 System.RuntimeType.CreateInstanceDefaultCtor(布尔 publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark) +247 System.Activator.CreateInstance(类型类型,布尔非公共)+83 System.Activator.CreateInstance(类型类型)+11 System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext, Type controllerType) +55

[InvalidOperationException: 尝试创建一个错误 “SampleAuthProject.Controllers.HomeController”类型的控制器。 确保控制器有一个无参数的公共构造函数。] System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext,类型控制器类型)+178 System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext,类型控制器类型)+76 System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext,字符串控制器名称)+88 System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext、IController&控制器、IControllerFactory&工厂) +194 System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback 回调, 对象状态) +50 System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback 回调,对象状态)+48 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext 上下文,AsyncCallback cb,对象 extraData)+16 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +103 System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep 步骤) +48 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean & completedSynchronously) +159

我认为这个错误是由于 DI 造成的。

所以在我的 startup.cs 中包含

public void Configuration(IAppBuilder app)

    ConfigureAuth(app);

public Startup()

    var builder = new ConfigurationBuilder();
    Configurations = builder.Build();

public IConfigurationRoot Configurations  get; 
public void ConfigureServices(IServiceCollection services)

    try
    
        services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configurations.GetConnectionString("DefaultConnection")));

        services.AddIdentity<ApplicationUser, IdentityRole>()
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultTokenProviders();

        services.AddMvc();
        services.AddTransient<UserManager<ApplicationUser>>();
        services.AddTransient<ApplicationDbContext>();
    
    catch (Exception ex)
    
        throw ex;
    


public void Configure(IApplicationBuilder app,
               IHostingEnvironment env, ILoggerFactory loggerFactory)

    app.UseIdentity();

我的 HomeController 是

 [Microsoft.AspNetCore.Authorization.Authorize]
public class HomeController : Controller

    private readonly UserManager<ApplicationUser> userManager;

    public HomeController(UserManager<ApplicationUser> userManager)
    
        this.userManager = userManager;
    
    [Microsoft.AspNetCore.Authorization.Authorize(Roles = "User")]
    public ActionResult Index()
    
        //userManager=new UserManager<ApplicationUser>();
        string userName =  userManager.GetUserName(System.Security.Claims.ClaimsPrincipal.Current);
        return View("Index",userName);
           

【问题讨论】:

如果你有一个无参数的构造函数,它可以工作吗? 不,userManager 变为空 图片是从右侧剪切的,您能否发布整个错误消息 确定,错误信息已更新 @Jinesh 你确定你使用的是核心项目吗?跟踪中的那些命名空间来自 MVC 5。看来您正在尝试混合框架版本。 【参考方案1】:

您似乎正在尝试混合框架版本。

Startup 使用了来自 asp.net-mvc-5IAppBuilder 和来自最近的 asp.net-core 的 IApplicationBuilder .

还有异常信息

没有为此对象定义无参数构造函数

通常与从 MVC 5 和 Web.Api 2 返回的模糊消息相关联。*

这基本上意味着该项目的依赖注入框架不知道身份依赖项,这就是它无法将依赖项注入控制器的原因。

要么确保该项目实际上是一个 asp.net-core 项目,以便能够使用 asp.net-core-identity

Introduction to Identity on ASP.NET Core

或者使用正确版本的 Identity Framework for MVC 5。

Introduction to ASP.NET Identity

【讨论】:

以上是关于ASP.NET Core Identity UserManager<ApplicationUser> -Error 没有为此对象定义无参数构造函数的主要内容,如果未能解决你的问题,请参考以下文章

“Identity.External”的 ASP.NET Core 标识异常

ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 14. ASP.NET Core Identity 入门

ASP.Net Core 如何在 EF Core 和 Identity 中获取用户角色

Asp.Net Core 2.1 Identity - UserStore 依赖注入

ASP.NET Core Identity 系列之四

ASP.NET Core Identity - 扩展密码哈希