簡體   English   中英

ASP.NET Core 使用 UserManager 或 Entity Framework 來驗證擴展表單字段

[英]ASP.NET Core using UserManager or Entity Framework to validate extended form field

我已經按照以下步驟來搭建 Razor 類庫的腳手架ASP.NET Core 項目中的腳手架標識

我還擴展了我的模型以包含一個名為Office365DomainName的屬性:

    [Required]
    [Display(Name = "Office 365 Domain Name")]
    public string Office365DomainName { get; set; }

此屬性已包含在所有正確的位置,以確保按照文檔填充我的 SQL 數據庫

現在,當新用戶嘗試注冊時,我想檢查數據庫以確保Office365DomainName值不存在。

這是我嘗試過的:

  1. ApplicationDbContext注入我的Register.cshtml.cs文件並執行var tenantResult = await _context.Tenant.FindAsync(Input.Office365DomainName); 然而,這給了我一個關於有一個主鍵來查詢的例外。 這是有道理的......但我不知道如果不先查看數據(catch 22),PK會是什么。
  2. 接下來我嘗試了 UserManger 的方法var foo = await _userManager.GetUserAsync(User); . 但是,由於還沒有用戶登錄,因此User不存在。

我似乎無法從 UserManager 中找到滿足我需求的內置方法。 那么一個人如何在不知道主鍵的情況下查詢實體呢? 我想 UserManager 的CreateAsync方法會執行此檢查以確保其他用戶不存在; 我只是想添加該功能並檢查我添加的字段。

這是我的 startup.cs 相關信息:

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

這是我的ApplicationDbContext.cs

    public class ApplicationDbContext : IdentityDbContext<UserRegistrationExtension>
    {
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
            : base(options)
        {
        }
    }

我表示表單數據的模型是UserRegistrationExtension 我之前的嘗試是在UserRegistrationExtension類型的ApplicationDbContext.cs中創建一個Tenant對象。 完全猜對了,但我覺得我沒有走在正確的軌道上。

基本上我假設我需要在這里某處引用我的UserRegistrationExtension類型,但我不知道在哪里包含它?

您的第一個問題歸結為使用FindAsync 該方法專門通過主鍵進行查詢,因此當您傳遞Office365DomainName值時,它會嘗試以該值作為主鍵查找記錄,而這顯然不是。 相反,您應該執行以下操作:

await _context.Tenants.SingleOrDefaultAsync(x => x.Office365DomainName == Input.Office365DomainName);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM