IM使用MVC在项目上工作。我想使用身份库进行会员资格。这是解决方案视图:
我制作了帐户controller并添加registerview。:
public async Task<ActionResult> Register(RegisterViewModel model)
{
if (!ModelState.IsValid) return View(model);
var userManager = MemberShipTools.NewUserManager();
var roleManager = MemberShipTools.NewRoleManager();
var checkUser = userManager.FindByName(model.TCNo);
if (checkUser!=null)
{
ModelState.AddModelError(string.Empty, "Bu TC No sistemde kayıtlı");
return View(model);
}
checkUser = userManager.FindByEmail(model.Email);
if (checkUser!=null)
{
ModelState.AddModelError(string.Empty, "Bu mail adresi sistemde kayıtlı");
return View(model);
}
var user = new Kullanici()
{
Ad=model.Ad,
Soyad=model.Soyad,
Email=model.Email,
UserName=model.TCNo,
};
var response = userManager.Create(user, model.Sifre);
if (response.Succeeded)
{
if (userManager.Users.ToList().Count() == 1)
{
userManager.AddToRole(user.Id, "Admin");
}
else
{
userManager.AddToRole(user.Id, "Passive");
}
return RedirectToAction("Login", "Hesap");
}
else
{
ModelState.AddModelError(string.Empty, "Kayıt işleminde bir hata oluiştu");
return View(model);
}
}
当我尝试添加新成员时,它说"不存在角色管理员"。但是在用户表中添加了新成员,ASPNET角色表是空的。之后,我在此站点中搜索并找到了一个求解,我将此行添加到我的代码中,并且效果很好。
const string roleName = "Admin";
var role = roleManager.FindByName(roleName);
if (role == null)
{
role = new Rol() { Name="Admin", Aciklama="Site Yöneticisi"};
roleManager.Create(role);
}
但这不是合乎逻辑的,我检查角色并尝试添加角色的每个寄存器页面,我的问题是我应该在哪里编写此滚动添加代码,哪个页面是哪个页面,因为我只需要两个或三个角色。我必须一次创建它们,我知道,但我不知道我在哪里做。感谢您的回答,对不起,我的英语不好:)
可能有助于的东西是在启动时运行的种子数据库类。是否可以安全地假设您正在使用代码第一数据库?我将展示两者的示例。
因此,在您的"数据" 文件夹中要做的第一件事是创建一个名为" seeddata"
的类using Project.Models.DatabaseModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Threading.Tasks;
namespace Project.Data
{
public class SeedData
{
private ApplicationDbContext _context;
public ApplicationContextSeedData(ApplicationDbContext context)
{
_context = context;
}
public void EnsureSeedData()
{
if ("Check if roles are already there")
{
role = new Rol() { Name="Role1", Aciklama="Site Yöneticisi"};
roleManager.Create(role);
role = new Rol() { Name="Role2", Aciklama="Site Yöneticisi"};
roleManager.Create(role);
role = new Rol() { Name="Role3", Aciklama="Site Yöneticisi"};
roleManager.Create(role);
}
}
}
}
然后,一旦您在startup.cs类中制作了一旦添加以下行:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddScoped<SeedData>(); <------ This Line
}
然后,一旦有了,您要确保在您的数据库中创建的任何内容都将进入您的应用程序启动时。