AspNet Core脚手架应用程序中的“登录”和“注册”页面在哪里?


137

在VS 2017中,我创建了一个新的ASP.NET Core Web应用程序。在向导的第二页上,选择“ Web应用程序”,并为“身份验证”选择“个人用户帐户”。

现在,我正在尝试查找与/ Account / Register和/ Account / Login关联的页面

_Layout.cshtml引入_LoginPartial.cshtml,就像在经典MVC中一样:

<div class="navbar-collapse collapse">
    <ul class="nav navbar-nav">
        <li><a asp-page="/Index">Home</a></li>
        <li><a asp-page="/About">About</a></li>
        <li><a asp-page="/Contact">Contact</a></li>
    </ul>
    <partial name="_LoginPartial" />
</div>

如果用户未登录,则_LoginPartial包含<a>指向登录和注册页面的标记:

<ul class="nav navbar-nav navbar-right">
    <li><a asp-area="Identity" asp-page="/Account/Register">Register</a></li>
    <li><a asp-area="Identity" asp-page="/Account/Login">Login</a></li>
</ul>

一切似乎都说得通。但是我希望Areas文件夹结构包含Register和Login文件夹。它不是。我唯一找到的是_ViewStart.cshtml

区域文件结构

我知道脚手架的代码可以工作,当我运行项目时,“注册”链接指向“ / Identity / Account / Register”,而“登录”链接指向“ / Identity / Account / Login”。单击“注册”链接会给我一个注册页面,其中包含文本“创建新帐户”。

但是我在项目的任何地方都找不到文本“创建新帐户”。

有人可以告诉我我所缺少的吗?

Answers:


141

在asp.net core 2.1的预览版中宣布将Identity UI移到新的Razor类库。 https://blogs.msdn.microsoft.com/webdev/2018/03/02/aspnetcore-2-1-identity-ui/

如果您更喜欢本地视图,仍然可以将身份视图放入您自己的项目中:https : //docs.microsoft.com/zh-cn/aspnet/core/security/authentication/scaffold-identity? view =aspnetcore-2.1 &tabs = visual-studio


115
答案是大拇指,微软是大拇指。向开发人员隐藏代码,并为他们提供用于Auth的基本UI的意义何在?那个好好笑。来吧,微软,我们想研究代码,学习,破坏,修复和部署它。这很奇怪。
Teoman shipahi

4
是否有任何PM命令,以便我们可以将所有标识文件都保存到本地。
panky sharma

3
@pankysharma我刚刚添加了一个带有命令的答案(以防将来有人需要)。
Alisson

3
我们是否必须认真使用Razor页面?有没有选择简单地支撑常规MVC视图的选项?
clockwiseq

如果还有其他人像我一样愚蠢,花了我更长的时间才意识到您可以通过右键单击文件并选择“转到页面模型”来查看“获取/发布”代码
Shoe

59

您可以在Visual Studio中执行此操作,右键单击您的项目,然后选择“添加”->“新脚手架”

新脚手架

然后选择身份并单击添加 选择身份

现在,选择要覆盖的页面。下拉数据上下文类:并且应该为您预先填写您的命名空间和上下文。

选择页面

最后单击添加。如果那里已经有覆盖文件(即从模板),这将警告您覆盖它们。


实际上,这确实有效。但是,导入“登录”页面(我有兴趣自定义的页面)后,我的代码将无法完全编译。解决方案可以在这里找到:stackoverflow.com/questions/58277172/…
Yossi Geretz,

谢谢您的出色回答John,您知道为什么禁用用户类下拉列表(在表单末尾)吗?
Hamza Khanzada,

1
由于它做的工作👍
AhmadMM

从内存,用户类变为启用,一旦你创建一个数据上下文类(点击+按钮)
约翰·拉赫

14

右键单击项目,选择Add -> New Scaffold Item,在对话框中,在左窗格中选择“ 身份 ”。

在此处输入图片说明

在此处输入图片说明


您也可以使用以下命令生成这些页面:

dotnet aspnet-codegenerator identity -dc WebApplication1.Data.ApplicationDbContext

确保用您自己的名称空间+ DbContext名称替换。页面在这里生成:

在此处输入图片说明


如果您看到此问题:

功能“默认文字”在C#7.0中不可用。请使用语言版本7.1或更高版本。

您可以通过将其添加到您.csproj并重建它来修复它:

<PackageReference Include="Microsoft.CodeAnalysis.Common" Version="3.2.0-beta3-final" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="3.2.0-beta3-final" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="3.2.0-beta3-final" />

错误:dotnet:脚手架失败。在文件夹中找不到项目文件
迭戈贝南西奥

@DiegoVenâncio是否用WebApplication1.Data.ApplicationDbContext正确的名称空间和文件名替换了?
阿里森

2
当然,删除最后一行后,可以工作:<PackageReference Include =“ Microsoft.CodeAnalysis.CSharp.Workspaces” Version =“ 3.2.0-beta3-final” />
DiegoVenâncio19年

1
您也可以通过Visual Studio解决方案资源管理器stackoverflow.com/a/54995794/2073738
Suit Boy Apps,

1
@DaImTo在dotnet和aspnet之间不应有连字符。应该是dotnet aspnet-codegenerator。也许这是问题所在?
Alisson

6

“如果您希望所有身份代码都包含在您的应用程序中,以便可以根据需要进行更改,则可以使用新的身份支架将身份代码添加到您的应用程序中。所有脚手架的身份代码都是在特定于身份的区域文件夹中生成的,因此可以很好地与您的应用程序代码分开。

https://blogs.msdn.microsoft.com/webdev/2018/02/02/asp-net-core-2-1-roadmap/#identity

对我来说,它非常好用且容易。


1
如何更改以在本地主机上查看或编辑身份代码
panky sharma 18/12/7

今天,我已经在一个现有项目中使用了此功能,在该项目中,我使用现有的DbContext更新到2.2,一旦我告诉我现有的上下文它是从Identity继承的,它就很棒了!
jamheadart '19

1

聚会晚了一点,但是在对Identity UI感到沮丧之后,我放弃了。没有它创建您的项目。我的建议是(使用2.1或2.2时)创建自己的帐户/管理控制器和mvc页面。某些startup.cs调试将是必需的。同时禁用发布视图(即views.dll)编译选项。也许我没有设置选项,但是编译器完全忽略了页面级脚本块中的任何更改。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.