为了账号安全,请及时绑定邮箱和手机立即绑定

ASP Net Core - 通用页面模型

ASP Net Core - 通用页面模型

C#
富国沪深 2023-04-29 18:12:27
我开始学习使用 ASP Net Core 编程。在花一些时间使用 Asp Net Core Identity 时,我想实现一个自己的登录页面以用于学习目的。不幸的是,如果您想使用包含通用参数的页面模型,如 Asp Net Core Identity 的 Login.cshtml.cs,现在我有一些问题要了解依赖注入是如何工作的。在源代码中,有两个类派生自登录页面的页面模型:[AllowAnonymous][IdentityDefaultUI(typeof(LoginModel<>))]public abstract class LoginModel : PageModel和internal class LoginModel<TUser> : LoginModel where TUser : class我读到 SignInManager 类处理 Identity 中的登录和注销过程。但是因此我想我必须使用内部类。但我不明白 Asp Net Core 标识符如何使用内部类而不是抽象类,或者它可能是这样?!即使在剃须刀页面中,也只有抽象类用作模型:@page@model LoginModel@{ViewData["Title"] = "Log in";}有没有人可以向我解释我必须做什么才能像内部 LoginModel 类一样为页面模型使用通用参数?我认为这对于其他一些情况也可能非常有用。
查看完整描述

1 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

我想我找到了解决问题的方法。内部类似乎是由 PageModel 约定初始化的,可以在 IdentityPageModelConvention 源文件中找到:


public void Apply(PageApplicationModel model)

    {

        var defaultUIAttribute = model.ModelType.GetCustomAttribute<IdentityDefaultUIAttribute>();

        if (defaultUIAttribute == null)

        {

            return;

        }


        ValidateTemplate(defaultUIAttribute.Template);

        var templateInstance = defaultUIAttribute.Template.MakeGenericType(typeof(TUser));

        model.ModelType = templateInstance.GetTypeInfo();

    }

此方法似乎通过在抽象 LoginModel 类中定义的 IdentityDefaultUI 属性来确定具有 TUser 通用属性的内部类:


[IdentityDefaultUI(typeof(LoginModel<>))]

public abstract class LoginModel : PageModel


查看完整回答
反对 回复 2023-04-29
  • 1 回答
  • 0 关注
  • 128 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信