Действие контроллера не запущено - Простой проект - ASP.NET MVC CORE 2.0 - PullRequest
0 голосов
/ 12 ноября 2018

У меня очень простое веб-приложение, в котором я пытаюсь позволить людям зарегистрировать пользователя.Поэтому я пытаюсь сохранить данные регистрации пользователя в Entity Framework, но безуспешно.

По какой-то причине IActionResult RegisterUser не запускается при отправке формы (я пытался установить точки останова, ничего не произошло),Кто-нибудь может определить почему?

Startup.cs

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        var connection = @"Server=(localdb)\mssqllocaldb;Database=APIExercise2;Trusted_Connection=True;ConnectRetryCount=0";
        services.AddDbContext<DataContext>(options => options.UseSqlServer(connection));
        services.AddIdentity<IdentityUser, IdentityRole>()
                                        .AddEntityFrameworkStores<DataContext>();
        services.AddMvc();
    }
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        app.UseMvc(routes =>
        {
            routes.MapRoute("Default", "{controller=Account}/{action=Index}");
        });
        app.UseFileServer();
    }
}

Index.cshtml

@model CS_ConfigSettings.Models.Register

<form asp-controller="Account" asp-action="RegisterUser" method="post">
    <input asp-for="Email" type="text" name="Email" id="Email" />
    <input asp-for="Password" type="password" name="Password" id="Password" />
    <button type="submit">Submit</button>
</form>

Контроллер

public class AccountController : Controller
{
    private readonly UserManager<IdentityUser> _userManager;
    public AccountController(UserManager<IdentityUser> userManager)
    {
        _userManager = userManager;
    }

    public IActionResult Index()
    {
        return View();
    }

    [HttpPost]
    public async Task<IActionResult> RegisterUser(Register register)
    {
        var user = new IdentityUser
        {
            Email = register.Email
        };

        var result = await _userManager.CreateAsync(user, register.Password);

        return View();

    }
}

Register.cs

public class Register
{
    public int Id { get; set; }

    [Required]
    [EmailAddress]
    [Display(Name = "Email")]
    public string Email { get; set; }

    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }
}

DataContext.cs

public class DataContext : DbContext
{
    public DbSet<Register> register { get; set; }
    public DataContext(DbContextOptions<DataContext> options) : base(options)
    {
        Database.EnsureCreated();
    }
}

КогдаЯ отправляю форму, точки останова, установленные в Controller-action RegisterUser, не срабатывают, и таблица базы данных register не обновляется.

Заранее спасибо.

1 Ответ

0 голосов
/ 13 ноября 2018

так вы понимаете, что Identity создает таблицы для вас? Их обычно называют AspNetUsers, AspNetRoles, AspNetRoleUsers и т. Д., Поэтому создание register будет таблицей, которую Identity никогда не будет использовать.

Если этих таблиц, перечисленных ранее, нет в созданной вами базе данных, вам нужно создать миграцию, обычно это миграция initial, которая создает все таблицы идентичности. используя команды PMC или командную строку с dotnet. Я предлагаю вам заново создать проект с индивидуальными учетными записями пользователей, выбранными для создания функций идентификации для вас.

Тот факт, что вы не смогли поразить этот метод точкой останова ... Для объекта, который UseFileServer мешает MVC ... всегда всегда UseMVC() будет последней записью. Порядок имеет значение.

Как только этот метод будет запущен, он выдаст ошибку, так как UserManager умрет из-за несуществующих таблиц, так как это будет местоположение нового созданного пользователя в AspNetUsers

командная строка: dotnet ef migrations add <nameofmigration>

PMC: Add-Migration <nameofmigration>

, затем запустите Update-Database, чтобы зафиксировать все изменения, которые вы только что внесли.

https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/

Фрагмент кода из одного из моих проектов

 //remainder of Startup.cs left out for brevity    
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();

            app.UseBrowserLink();
            app.UseDatabaseErrorPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            app.UseHsts();

        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseCookiePolicy();
        app.UseIdentityServer();

        app.UseMvc(routes =>
        {
            routes.MapRoute(
              name: "areas",
              template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
            );


            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");


        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...