我是 ASP .NET Core 2.1 的初学者,正在开发使用 ASP .NET Core 2.1 进行单独身份验证的项目。我想将登录页面设置为默认路由,而不是主页/索引:
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
任何帮助我如何将其更改为 ASP .NET Core 2.1,因为登录现在用作剃刀页面而不是 MVC 操作视图。
在 ConfigureServices 方法中使用它。
services.AddMvc().AddRazorPagesOptions(options=> {
options.Conventions.AddAreaPageRoute("Identity", "/Account/Login","");
}).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
然后在Configure方法中
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
我通过在
ConfigureServices
函数(Startup.cs)中使用此代码解决了这个问题
services.AddMvc().AddRazorPagesOptions(options => {
options.Conventions.AddAreaPageRoute("Identity", "/Account/Login", "/Account/Login");
}).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
只需在您的配置中使用它即可。这会将 AuthorizeAttribute 添加到您的页面
services.AddMvc()
.AddRazorPagesOptions(options =>
{
options.Conventions.AuthorizePage("/Home/Index");
});
或者像这样更改默认路线:
services.AddMvc().AddRazorPagesOptions(options =>
{
options.Conventions.AddPageRoute("/Employees/Index", "");
});
将此代码插入到Startup.cs中的ConfigureServices()中
{
services.AddMvc().AddRazorPagesOptions(options =>
{
//Registering 'Page','route-name'
options.Conventions.AddPageRoute("/Account/Login", "");
});
}
过了很长时间我解决了它。需要为 AREAS => 添加 ALLOW
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
.AddRazorPagesOptions(options =>
{
options.AllowAreas = true; //--working after add this line
options.Conventions.AddAreaPageRoute("Identity", "/Account/Login", "");
});
添加授权策略,应用程序默认要求用户对abc文件夹下的页面进行身份验证,并且不会要求用户对abc文件夹下的某些公共页面进行身份验证。
services.AddRazorPages().AddRazorPagesOptions(options =>
{
options.Conventions.AuthorizePage("/abc");
options.Conventions.AllowAnonymousToPage("/abc/PublicPage");
});
我的asp net core项目也遇到了同样的问题,该项目由一个API(asp net core web API)和一个客户端(asp net core MVC)组成,当我发布我的项目并尝试托管它时遇到的问题在我的本地主机中,它没有返回我在项目startup.cs文件中配置的登录页面,端点设置我设置的默认页面是“{controller=Account}/{action=Login}/{id?}”但本地主机没有对此做出回应,在网上找到解决方案后,我找到了一些机制来做到这一点,但该解决方案不适合我,所以我自己做了一个技巧,希望许多网络核心开发人员对我的解决方案有所帮助: 所以诀窍是我将端点的先前配置恢复为 “{controller=Home}/{action=Index}”,并通过从屏幕上删除“/{id?}”进行了一些更改,因此实际字符串是“
{控制器=主页}/{操作=索引}/{id?}
”,我已将其更改为“{controller=Home}/{action=Index}”,逻辑是当程序默认启动时,它将执行默认端点设置,因此程序将带我们到“Home”的控制器,并且在返回索引视图之前,操作是“索引”我已经检查了一个值“UserId”,该值必须在登录时创建并将其保存到会话变量中,
var userid = _session.GetString("userid"); if (string.IsNullOrEmpty(userid)) { return RedirectToAction("登录","账户"); }
这就是我解决问题的方法。本地主机和实时发布也运行良好,只需单击浏览器中的视图,它就会根据我的要求返回登录页面。 希望能帮助到你。 谢谢
builder.Services.ConfigureApplicationCookie(options =>
{
// Cookie settings
options.Cookie.HttpOnly = true;
options.ExpireTimeSpan = TimeSpan.FromMinutes(5);
options.LoginPath = "/Identity/Account/Login";
options.AccessDeniedPath = "/Identity/Account/AccessDenied";
options.SlidingExpiration = true;
});