Search code examples
c#asp.net-coreasp.net-core-webapiidentityserver4

Installing Quickstart UI for IdentityServer4


I created an empty asp.net core web application (dotnet new web -n <projectname>) and went to the github for IdentityServer4.Quickstart.UI and was followed the instructions to add the quickstart UI. I first did the powershell cmd iex ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/IdentityServer/IdentityServer4.Quickstart.UI/main/getmain.ps1')) to download the files and run the application but it keeps telling me Index not found but the file is inside of the Views folder. So I then deleted all those files it downloaded from the project and installed it using its templates by running the cmds dotnet new -i identityserver4.templates then dotnet new is4ui --force which downloaded those files again onto my project. However, it keeps telling me the same message.

I noticed that under the Quickstart folder, contains a folder named Home which has the HomeController.cs and the namespace is as IdentityServerHost.Quickstart.UI... do I need to change that namespace to match my solution i.e. ids.Quickstart.Home?

What is causing this to display that error when infact there is the Index.cshtml file inside of the Views folder?**

enter image description here

This is my startup.cs file:

namespace ids
{
    public class Startup
    {
        // This method gets called by the runtime. Use this method to add services to the container.
        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddIdentityServer()
                .AddInMemoryClients(Config.Clients)
                .AddInMemoryIdentityResources(Config.IdentityResources)
                .AddInMemoryApiResources(Config.ApiResources)
                .AddInMemoryApiScopes(Config.ApiScopes)
                .AddTestUsers(Config.Users)
                .AddDeveloperSigningCredential();

            services.AddControllersWithViews();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseRouting();
            app.UseStaticFiles();
            app.UseIdentityServer();
            app.UseAuthorization();

            //  app.UseEndpoints(endpoints => endpoints.MapDefaultControllerRoute());

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
            });

        }
    }
}

Here is the Index.cshtml

enter image description here


Solution

  • Try changing your app.UseEndpoints( endpoints => ...) line, in your Configure() method to the following:

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
    });
    

    Then, make sure you have a HomeController. Create a folder in your project named Controllers. The path should be ~/Controllers/{ControllerName}.cs while your views should be ~/Views/Home/{ViewName}.cshtml. In this case, Your {ViewName}.cshtml will be Index.cshtml and your controller name will be HomeController.cs.

    public class HomeController : Controller
    {
        [HttpGet]
        // Default return when user performs GET HTTP request
        public IActionResult Index()
        {
            return View();
        }
    }