Аккаунт / Логин не найден - личность - PullRequest
0 голосов
/ 27 сентября 2018

Я помещаю личность в мой уже созданный проект, но он не находит страницу Account/Login.

enter image description here

Это не локализациястраница, это controller:

[Route("[controller]/[action]")]
public class AccountController : Controller
{
    private readonly SignInManager<ApplicationUser> _signInManager;
    private readonly ILogger _logger;

    public readonly Erp.Models.ErpDb _context;
    public AccountController(Erp.Models.ErpDb context, SignInManager<ApplicationUser> signInManager, ILogger<AccountController> logger)
    {
        _signInManager = signInManager;
        _logger = logger;
        _context = context;
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Logout()
    {
        await _signInManager.SignOutAsync();
        _logger.LogInformation("User logged out.");
        return RedirectToPage("/Index");
    }
}

Startup

 public class Startup
{


    private IHostingEnvironment env;
    private IConfigurationRoot config;
    public Startup(IHostingEnvironment env)
    {

        this.env = env;
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            .AddEnvironmentVariables();

        config = builder.Build();

    }

    public IConfiguration Configuration { get; }


    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<ErpDb>(options => options.UseSqlServer("Data Source =servidor; Initial Catalog = ERP; User ID = sa; Password = password;Connect Timeout=30;"));

       services.AddMvc();

        services.AddIdentity<ApplicationUser, IdentityRole>()
    .AddEntityFrameworkStores<ErpDb>()
    .AddDefaultTokenProviders();
        if (env.IsDevelopment())
            services.AddScoped<IMailService, DebugMailService>();

        else
            services.AddScoped<IMailService, MailService>();

        services.AddMvc().AddJsonOptions(jsonOptions =>
        {
            jsonOptions.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
            jsonOptions.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
        })
        .AddRazorPagesOptions(options =>
        {

            options.Conventions.AuthorizeFolder("/Account/Manage");
            options.Conventions.AuthorizePage("/Account/Logout");
            options.Conventions.AuthorizePage("/Details");

        });

        services.AddCors();
        services.AddDistributedMemoryCache();
        services.AddSession();
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole(config.GetSection("Logging"));
        loggerFactory.AddDebug();

        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
            app.UseDatabaseErrorPage();
            app.UseBrowserLink();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");

        }

        app.UseStaticFiles();
        app.UseAuthentication();
        app.UseSession();
        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=About}/{id?}");
        });
    }

1 Ответ

0 голосов
/ 27 сентября 2018

Поскольку вы используете Razor pages для пользовательского интерфейса своей учетной записи, эти .cshtml файлы не могут быть в папке Views.Папка Views предназначена только для представлений, используемых MVC, но не для Razor Pages.

Для того, чтобы фреймворк подобрал их с правильным URL, вам нужно вместо этого переместить их в каталог Pages.

Поскольку вы затем смешиваете Razor Pages и MVC в одном проекте (что не является проблемой), вам придется настроить параметры компоновки, чтобы они оба выбирали один и тот же файл макета.

По сути, вам необходимо убедиться, что у вас есть файл _ViewStart.chtml в папках Views и Pages, которые настраивают макет для использования.Если вы ранее использовали MVC, то, скорее всего, у вас уже есть Views/_ViewStart.cshtml.В этом случае вам также необходимо создать файл Pages/_ViewStart.cshtml (вы можете скопировать его).Файл должен выглядеть следующим образом:

@{
    Layout = "_Layout";
}

Затем Razor Pages также попытается подобрать макет на Views/Shared/_Layout.cshtml, как это делает MVC.

...