C# 使用Razor页面更改ASP.NETCore2.1中的主页
我在一个ASP.NETCore2.1网站上工作,这个网站有Razor页面,这是我第一次使用Razor页面。但我想做的是更改主页或登录页。因此,如果用户未登录,站点应重定向到Areas文件夹中的/Account/Login页面,但如果用户登录,则应转到pages文件夹中名为DataManagement的页面,如下所示 我已经缝好了标识,并在配置服务中尝试了如下操作:C# 使用Razor页面更改ASP.NETCore2.1中的主页,c#,asp.net-core,asp.net-core-2.1,razor-pages,C#,Asp.net Core,Asp.net Core 2.1,Razor Pages,我在一个ASP.NETCore2.1网站上工作,这个网站有Razor页面,这是我第一次使用Razor页面。但我想做的是更改主页或登录页。因此,如果用户未登录,站点应重定向到Areas文件夹中的/Account/Login页面,但如果用户登录,则应转到pages文件夹中名为DataManagement的页面,如下所示 我已经缝好了标识,并在配置服务中尝试了如下操作: services.AddMvc().AddRazorPagesOptions(options => { option
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
公营创业
{
公共启动(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();
}
公共IConfiguration配置{get;}
//此方法由运行时调用。请使用此方法将服务添加到容器中。
public void配置服务(IServiceCollection服务)
{
配置(选项=>
{
//此lambda确定给定请求是否需要非必要cookie的用户同意。
options.checkApprovered=context=>true;
options.MinimumSameSitePolicy=SameSiteMode.None;
});
services.AddDbContext(选项=>
options.UseSqlServer(
GetConnectionString(“连接”);
服务附加性(
选项=>options.Stores.MaxLengthForKeys=128)
.AddEntityFrameworkStores()
.AddDefaultUI()
.AddDefaultTokenProviders()
.AddEntityFrameworkStores();
services.AddMvc().AddRazorPagesOptions(opts=>
{
opts.Conventions.AddPageRoute(“/DataManagement”、“/”);
opts.Conventions.AddPageRoute(“/DataManagement”,“home”);
opts.Conventions.AddPageRoute(“/DataManagement”,“index”);
}).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
//此方法由运行时调用。请使用此方法配置HTTP请求管道。
public void Configure(IApplicationBuilder应用程序、IHostingEnvironment环境、ApplicationDbContext上下文、角色管理器角色管理器、用户管理器用户管理器、IServiceProvider服务提供商)
{
if(env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
其他的
{
app.UseExceptionHandler(“/Error”);
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseAuthentication();
app.UseMvc();
}
最简单的方法就是在DataManagement.cshtml.cs
文件上使用[Authorize]
属性
[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";
});
在配置中:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
然后删除Index.cshtml
我认为在这种情况下,您需要如上所述定义自定义登录,从中获取,您应该更改路由配置。您的模板配置为如果在路由中未指定控制器名称,则默认控制器为Home,如果在路由中未指定操作,则默认操作为Index。您有两个选项来处理此问题。第一个选项是更改默认值控制器或索引或更改重定向路由。嘿@Baris,你能给我一个URL或示例吗?这么快的问题,我实际上有两个页面。如果用户登录,这个数据管理页面将是默认页面,并且“/帐户/登录”页面如果用户未登录,将是默认页面,我如何处理登录页面?因为您需要设置Auth?创建一个带有Razor页面和个人用户帐户的默认Web应用程序,以查看此示例。或参见此处:上面的Hi对我有效-您能确认吗。只需确保
login.cshtml
位于Pages
中即可>账户
区域中的文件夹。好的,我找到了这笔交易。它分为两部分。我重新添加了配置:好的,很好,一切正常?-如果是,请您标记为已回答:)