У меня очень простое веб-приложение, в котором я пытаюсь позволить людям зарегистрировать пользователя. Поэтому я пытаюсь сохранить данные регистрации пользователей в Entity Framework, но безуспешно.
У меня есть базовая модель и базовое представление, поэтому для краткости я не собираюсь публиковать их прямо сейчас, поскольку не думаю, что проблема заключается в них. Если кто-то хотел бы увидеть их, я опубликую их. Я пытаюсь использовать app.UseAuthentication , и я предполагаю, что некоторая моя логика неверна. Я пытаюсь сохранить в таблице dbo.AspNetUsers .
Startup.cs
public Startup(IHostingEnvironment env)
{
configuration = new ConfigurationBuilder()
.AddEnvironmentVariables()
.AddJsonFile(env.ContentRootPath + "/appsettings.json")
.Build();
}
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<IdentityDataContext>(options =>
options.UseSqlServer(configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<IdentityUser, IdentityRole>()
.AddEntityFrameworkStores<IdentityDataContext>()
.AddDefaultTokenProviders();
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseAuthentication();
app.UseMvc(routes =>
{
routes.MapRoute("Default", "{controller=Account}/{action=Index}");
});
app.UseFileServer();
}
appsettings.json
{
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=MyLocalDB;Trusted_Connection=True;"
}
}
Контроллер
public class AccountController : Controller
{
public IActionResult Index()
{
return View(new CombinedLoginAndRegisterModel());
}
private readonly UserManager<IdentityUser> _userManager;
private readonly SignInManager<IdentityUser> _signInManager;
public AccountController(UserManager<IdentityUser> userManager, SignInManager<IdentityUser> signInManager)
{
_userManager = userManager;
_signInManager = signInManager;
}
//Registration
[HttpPost]
public async Task<IActionResult> RegisterUser(CombinedLoginAndRegisterModel cbr)
{
var user = new IdentityUser
{
Email = cbr.Register.Email
};
var result = await _userManager.CreateAsync(user, cbr.Register.Password); //wait
return View();
}
}
Контекст данных
public class IdentityDataContext : IdentityDbContext<IdentityUser>
{
public IdentityDataContext(DbContextOptions<IdentityDataContext> options) : base(options)
{
Database.EnsureCreated();
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
}
}
Я очень ценю любую помощь и буду отвечать на запросы / комментарии.
EDIT
Index.cshtml
@model CS_config.Models.CombinedLoginAndRegisterModel
<h2>Register account</h2>
@using (Html.BeginForm())
{
@Html.ValidationSummary()
@Html.LabelFor(x => x.Register.Email, new { style = "margin-right: 7px;" })
@Html.TextBoxFor(x => x.Register.Email)<br><br>
@Html.LabelFor(x => x.Register.Password, new { style = "margin-right: 10px;" })
@Html.TextBoxFor(x => x.Register.Password)<br><br>
<button type="submit" name="RegisterUser">Submit</button> //named it to match the Task `RegisterUser` in the Controller
}