Il percorso della richiesta non corrisponde a un tipo di file supportato

Aug 18 2020

Sono nuovo di .Net Core MVC. Sto provando ad aggiungere un controller a un progetto esistente, ma ricevo l'errore

dbug: Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware[4]
The request path https://localhost:5001/api/admin/... does not match a supported file type

Questo mi fa pensare che non stia nemmeno arrivando all'app stessa ma che venga bloccato da qualche parte in una sorta di middleware. Oppure, perché si lamenta del tipo di file? Non c'è nessun "tipo" coinvolto qui, è solo una stringa contenente un URL.

In VSCode ho aggiunto il nuovo controller nella stessa cartella con i controller esistenti e la build ha funzionato bene. Ctrl-F5 lo fa apparire nel mio browser e posso eseguire le vecchie API (almeno quelle che ho provato) ma non quella nuova; dà un 404 se uso un URL al nuovo controller.

Questo ha anche installato Swagger e Swagger mostra le vecchie API ma non quella nuova.

In Startup.cs ha

app.UseRouting();

e anche

app.UseEndpoints(endpoints =>
            {
              endpoints.MapAreaControllerRoute(
                    name: "areas",
                    areaName: "areas",
                    pattern: "{area}/{controller=Home}/{action=Index}/{id?}");

              endpoints.MapControllerRoute("default",
                    "{controller=Home}/{action=Index}/{id?}");

                endpoints.MapRazorPages();
            });

Questo è .Net Core 3.1.302 e VSCode 1.48.0 su Windows 10.

Leggendo i tutorial avevo pensato che tutto quello che dovevo fare per aggiungere un controller era scrivere il codice (modellato strettamente su un controller esistente e funzionante) e costruirlo. Ma ci deve essere qualche passaggio aggiuntivo per registrare o registrare il nuovo controller da qualche parte?

È questo il metodo di configurazione corretto? Da Startup.cs

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IServiceProvider services)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                CreateUserRoles(services).Wait();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }

#if Release
            app.UseHttpsRedirection();
#endif
            app.UseStaticFiles();
            app.UseStaticFiles(new StaticFileOptions
            {
                FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "MobileApp.WebPortal", "wwwroot")),
                ServeUnknownFileTypes = true
            });

            app.UseSession();

            
            app.UseCookiePolicy();

            app.UseRouting();

            app.UseAuthentication();
            app.UseAuthorization();
            

            app.UseHangfireDashboard("/jobs", new DashboardOptions
            {
                Authorization = new [] { new HangfireAuthorizationFilter() },
                AppPath = "/"
            });

#if RELEASE
                //app.UseWebMarkupMin();
#endif

            app.UseEndpoints(endpoints =>
            {
                //endpoints.MapControllers();
                //endpoints.MapRazorPages();

                endpoints.MapAreaControllerRoute(
                    name: "areas",
                    areaName: "areas",
                    pattern: "{area}/{controller=Home}/{action=Index}/{id?}");

                //endpoints.MapAreaControllerRoute(
                //    name: "internaldefault",
                //    areaName: "Internal",
                //    pattern: "Internal/{controller=Patient}/{action}/{id?}");


                //endpoints.MapAreaControllerRoute(
                //    name: "identity",
                //    areaName: "Identity",
                //    pattern: "Identity/{controller=Account}/{action=Login}/{id?}");

                endpoints.MapControllerRoute("default",
                    "{controller=Home}/{action=Index}/{id?}");

                endpoints.MapRazorPages();
            });


            

            //var config = new MapperConfigurationExpression();
            //config.AddProfile(new MapperProfile());
            //Mapper.Initialize(config);

            var options = new MemoryCacheEntryOptions() { SlidingExpiration = TimeSpan.FromHours(2)};
            QueryCacheManager.DefaultMemoryCacheEntryOptions = options;
        }

Risposte

JohnThiesen Aug 19 2020 at 06:46

Bene, ho una risposta parziale a questo che non capisco del tutto. Stavo lavorando in VSCode. Ho creato un nuovo file per il mio PatientListController e l'ho inserito nella posizione appropriata nella gerarchia dei file e ho ricevuto i messaggi di errore descritti sopra (oltre al fatto che non è stato visualizzato in Swagger).

Ma se lavoro in Visual Studio (con cui ho meno familiarità), quando provo a creare un nuovo file, mi chiede specificamente cosa sto creando e scelgo Controller dall'elenco.

In VSCode, apparentemente non sa cosa sia questo nuovo file e quindi il compilatore lo ignora. Quindi il codice compilato non ha traccia del nuovo controller.

In Visual Studio il compilatore sa che ho aggiunto un nuovo controller e lo stesso identico codice funziona perfettamente e la nuova API viene visualizzata in Swagger.

Quindi ci deve essere un modo in VSCode per segnalare cosa fare con il nuovo file, ma non ho idea di come farlo. E inoltre non capisco perché VSCode funzioni in modo diverso da Visual Studio sotto questo aspetto.