Phi*_*l K 18 c# asp.net-core asp.net-core-identity
自ASP.NET Core 2.1发布以来,我正在使用新的Identity UI软件包.使用新生成的MVC项目,这里有一些可用的页面URL:
/Home/About
/Home/Contact
/Identity/Account/Login
/Identity/Account/Register
Run Code Online (Sandbox Code Playgroud)
如何配置路由以/Identity/从URL中删除部分?
Kir*_*kin 15
看起来这还不可能.查看源代码,很明显区域名称是硬编码的IdentityDefaultUIConfigureOptions<TUser>:
private const string IdentityUIDefaultAreaName = "Identity";
Run Code Online (Sandbox Code Playgroud)
这在少数几个地方使用,包括配置Razor Pages时.例如:
options.Conventions.AuthorizeAreaFolder(IdentityUIDefaultAreaName, "/Account/Manage");
Run Code Online (Sandbox Code Playgroud)
并且在配置Cookies身份验证时也是如此.例如:
options.LoginPath = $"/{IdentityUIDefaultAreaName}/Account/Login";
Run Code Online (Sandbox Code Playgroud)
值得注意的是,IdentityDefaultUIConfigureOptions<TUser>它本身是受保护的,因此覆盖选项的能力似乎不存在.
我打开了一个Github问题,看看我们是否可以从参与项目本身的人那里获得反馈.
2018-06-12更新
来自ASP.NET核心身份团队的Javier Calvarro Nelson在我提出的Github问题中提供了一些有价值的反馈,可归纳如下:
Identity UI位于某个区域的主要原因是最大限度地减少对应用程序的影响,并在应用程序代码和身份代码之间提供清晰的分离.
当想要自定义URL时,Javier建议使用以下选项之一:
虽然不受支持且不推荐,但Javier还指出可以使用自定义IPageApplicationModelConvention来覆盖URL.但是,如果您错过了,则不受支持,不推荐使用.
2018-06-27更新
在官方文档现在已经更新,以更好地解释说URL变化.
最简单的方法是将Pages文件夹从Areas / Identity中拖出到主项目中。请记住,@ page指令(在.cshtml中)使视图可直接用于“ Pages”(页面)下的任何视图。变成一个动作)如果您想更改默认的/ Account / Login等页面,也可以将Account文件夹重命名为其他名称
@page指令还可用于指定自定义路径,例如:@page“ / Login”
通过导航到/ Login直接访问登录页面
在您的startup.cs中,您可以更改:
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
Run Code Online (Sandbox Code Playgroud)
用:
services.AddMvc().AddRazorPagesOptions(o => o.Conventions.AddAreaFolderRouteModelConvention("Identity", "/Account/", model =>
{
foreach (var selector in model.Selectors)
{
var attributeRouteModel = selector.AttributeRouteModel;
attributeRouteModel.Order = -1;
attributeRouteModel.Template = attributeRouteModel.Template.Remove(0, "Identity".Length);
}
})
).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
Run Code Online (Sandbox Code Playgroud)
它会路由:
/身份/帐号/登录到/帐号/登录
/身份/帐号/注册到/帐号/注册
等等...
要处理ReturnUrl,您可以创建一个新的Action:
[Route("Identity/Account/Login")]
public IActionResult LoginRedirect(string ReturnUrl)
{
return Redirect("/Account/Login?ReturnUrl=" + ReturnUrl);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6406 次 |
| 最近记录: |