Изменение домашней страницы в ASP.Net Core 2.1 с помощью страниц Razor - PullRequest
0 голосов
/ 05 декабря 2018

Я работаю над сайтом ASP.Net Core 2.1 со страницами Razor, впервые использую страницы Razor.Но я хотел бы изменить домашнюю страницу или целевую страницу.Поэтому, если пользователь не вошел в систему, сайт должен перенаправить на страницу / Account / Login в папке Areas, но если пользователь вошел в систему, он должен перейти на страницу с именем DataManagement, как показано ниже в папке pages.

enter image description here

Мне уже вшито удостоверение, и я попробовал что-то вроде ниже в Configure Services:

services.AddMvc().AddRazorPagesOptions(options =>
{
    options.Conventions.AddAreaPageRoute("Identity", "/Account/Login", "");
}).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

И вметод настройки:

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

Безрезультатно.

РЕДАКТИРОВАТЬ Мой StartUp.cs

Открытый класс Startup {public Startup (конфигурация IConfiguration){Конфигурация = конфигурация;}

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<CookiePolicyOptions>(options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });

        services.AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlServer(
                Configuration.GetConnectionString("Connection")));
        services.AddIdentity<ApplicationUser, ApplicationRole>(
            options => options.Stores.MaxLengthForKeys = 128)
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultUI()
            .AddDefaultTokenProviders()
            .AddEntityFrameworkStores<ApplicationDbContext>();


        services.AddMvc().AddRazorPagesOptions(opts =>
        {
            opts.Conventions.AddPageRoute("/DataManagement", "/");
            opts.Conventions.AddPageRoute("/DataManagement", "home");
            opts.Conventions.AddPageRoute("/DataManagement", "index");

        }).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);


    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ApplicationDbContext context, RoleManager<ApplicationRole> roleManager, UserManager<ApplicationUser> userManager, IServiceProvider serviceProvider)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
            app.UseDatabaseErrorPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");
            app.UseHsts();
        }

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

        app.UseAuthentication();

        app.UseMvc();

    }

1 Ответ

0 голосов
/ 05 декабря 2018

Самый простой способ сделать это - использовать атрибут [Authorize] в вашем файле DataManagement.cshtml.cs.

[Authorize]
public class DataManagementModel : PageModel
{
    public void OnGet()
    {

    }
}

Просто настройте свою домашнюю страницу по умолчанию как обычно в Startup.cs:

services.AddMvc().AddRazorPagesOptions(opts =>
{
    opts.Conventions.AddPageRoute("/DataManagement", "/");
    opts.Conventions.AddPageRoute("/DataManagement", "home");
    opts.Conventions.AddPageRoute("/DataManagement", "index");
    opts.Conventions.AddAreaPageRoute("Account", "/Login", "/Account/Login");

}).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

services.ConfigureApplicationCookie(options =>
{
    options.LoginPath = $"/Account/Login";
});

и в Configure:

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

        });

Затем удалите Index.cshtml

Я думаю, что в этом случае вам нужно определить пользовательский логин, как указано выше, взятый из здесь

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