ASP.NET Core 2.1 Remove Identity Pages created using Scaffolding - asp.net-core

I'm probably just missing a simple trick here, but I created the Identity framework in an ASP.NET Core project, created my own fields with my own classes, ran migrations, then once confirmed it was all working with the Default UI. It was working perfectly so went to customize the Identity UI so I could better control specific pages. Trouble was, thought I'd be adventurous and select every page to customize... yes dumb I know.. Now I've got some 80 pages or something that I no longer want.
I really only want to scaffold the registration and manage data pages, if I ran the Scaffolding again will that simply create new pages or fail because the pages already exist, or will it remove any pages that I don't select? I'm loathed to try it for fear of breaking something.
Perhaps it's down to manually deleting the pages I don't want, but will that cause issues with those pages that I haven't selected to customize. Seems great there's a scaffolding option to create the pages, but removing them... it's not so obvious...

For removing unwanted Identity Pages, you could delete them directly from your solution.
For Identity Razor page, if you add scaffold pages or manually create the razor pages with the corresponding name in Identity/Pages/Account, they will replace default Identity Razor page implementation. If there is no razor pages or you delete them, it will reuse default razor page from Razor library.

Related

.NET Core 3 Razor pages app - Authorize all pages within an Area

I am trying to lock access to all the pages in selected Areas in my Razor Pages app. So far I have this sample structure
Areas
Account
Index.chtml
Business
Index.chtml
If I add
options.Conventions.AuthorizeFolder("/business", "/index");
to startup, it works on a per page basis, but I cant see any clear way to lock the entire Business folder.
I've tried the folder based options mentioned here
https://learn.microsoft.com/en-us/aspnet/core/security/authorization/razor-pages-authorization?view=aspnetcore-3.0
but none seem to work. Is this even possible?
So 10 seconds after asking, this works
options.Conventions.AuthorizeAreaFolder("business", "/");

How to separate username and email on ASP.NET Core Identity

I'm so newbie in here as I try to learn this new stuff. But, I have a problem. On asp.net core identity, there's no AccountController (as many blog say it should be modified there), so how can I modify this? I'm so confused with this. Thank you.
The latest version of Identity has a default UI that's included programmatically, via AddDefaultIdentity (which calls AddDefaultUI under the hood). You can use the Identity scaffold to add just the parts you want to modify, which works like an overload: anything not explicitly included in your project falls back to the default UI version.
Right-click on your project in the Solution Explorer, go to "Add" and then "New Scaffolded Item..." On the left of the resulting window, there's a tab for "Identity", which has just one scaffold to choose from, "Identity". Click the "Add" button. This will get you yet another window, where you can now choose which items you want to scaffold into your project.
Be advised that Identity's default UI makes use of Razor Pages, now, so you still won't get an AccountController and such. However, you can simply include pages like Account\Register and Account\Login, which should be the two places you would need to make this change. Feel free to add and modify anything else you like as well.

VS 2017 ASP.NET Core Web Application and Individual User Accounts works but pages are non-existent

When I create a web project using "ASP.NET Core Web Application" / "Web Application" (non-MVC) / "Individual User Accounts"... I get the sample project with Register and Login buttons that show their respective pages when I click on them. HOWEVER... the very weird thing is if I search for "Create a new account" which is on the register page it's not found... and more... there is no AccountController in the Identity area or anywhere... so 1) the pages aren't anywhere in my solution folder and 2) how in the world are these pages showing up?!? I've tried on two different computers now. (using Core 2.1)
As an example this link works:
<a asp-area="Identity" asp-page="/Account/Login">Login</a>
and takes me to:
https://localhost:44300/Identity/Account/Login
and yet my folder structure (both in the solution and on disk) looks like this:
ASP.NET Core 2.1 with Identity automatically includes the "Default UI". It's a Razor Pages class library that's referenced via AddDefaultIdentity in Startup, which under the hood literally calls AddDefaultUI.
If you want the actual files in your project, you need to scaffold them in. Right click your project in the solution explorer and choose Add > New Scaffolded Item... Then, click the Identity listing on the left, and then the Add button. A new window will pop allowing you to select the pages you want included, your context, etc. Configure it how you like and go.
It's also worth noting, that as long as you use AddDefaultIdentity, the default UI is still included, which means you don't actually need all the scaffolded files if you want any of them. They'll essentially function as overrides. Anything specifically included in your project will be used, while anything that's missing will be pulled from the default UI.
This also means that if you want to do something like use standard controller actions and views instead of Razor Pages, the default UI will still be active, and take precedence. You have to use AddIdentity or AddIdentityCore instead of AddDefaultIdentity if you want the default UI off completely.
ASP.NET Core 2.1 introduced Razor UI in class libraries. Identity with it's UI is in nuget package.
The nice thing about this is you can now package UI with your libraries and then expose the UI for overriding.
This post describes how to override the UI. Essentially, you add the pages you want to override to your project to /Areas/Identity/Pages.... the easiest way currently is to run the scaffolder for identity and a visual walkthrough.

Piranha CMS to existing MVC application

How do I add existing view pages to Piranha CMS. All searches refer to existing models which I have none in my solution.
You have to add the pages through the Manager interface into the database. Pirhana wont "see" your MVC Views automagically.

ASP.NET MVC, razor view, how to modify html on the fly like Glimpse?

I'm upgrading from .NET 2.0 to MVC 4. Back in .NET 2.0 webform, we had to inject license information on the fly to the footer of the software by override the "Render" function in .aspx.cs page (using HtmlTextWriter), find a particular spot of the footer and then insert the license text info there.
The reason I don't want to directly put that in the viewstart page or any razor page themselves using HTMLhelper is because I don't want my customers to mess with it. So hard code is not an option.
I use Glimpse and I see Glimpse is enabled by adding a HTTPModule,etc in web.config and magically, an icon appears on my app. Something similar ?
Bottom line is, I need to hijack the finished HTML output, modify it and return the final result to client.
How do you do this in MVC? HttpModule?
Thanks!
Glimpse uses a feature of ASP.NET called a ResponseFilter to change the output HTML on the fly.
The ResponseFilter, in the case of Glimpse, is set inside the HttpModule - but it could be set anywhere.
Four Guys From Rolla has an old but still relevant article on how to create ResonseFilters.