Jalur permintaan tidak cocok dengan jenis file yang didukung

Aug 18 2020

Saya baru mengenal .Net Core MVC. Saya mencoba menambahkan pengontrol ke proyek yang ada, tetapi saya mendapatkan kesalahan

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

Ini membuat saya berpikir itu bahkan tidak sampai ke aplikasi itu sendiri tetapi diblokir di semacam middleware di suatu tempat. Atau, mengapa mengeluh tentang jenis file? Tidak ada "tipe" yang terlibat di sini, itu hanya string yang berisi URL.

Di VSCode saya menambahkan pengontrol baru di folder yang sama dengan pengontrol yang ada, dan build berfungsi dengan baik. Ctrl-F5 menampilkannya di browser saya dan saya dapat menjalankan API lama (setidaknya yang saya coba) tetapi tidak yang baru; ini memberi 404 jika saya menggunakan URL ke pengontrol baru.

Ini juga telah menginstal Swagger, dan Swagger menampilkan API lama tetapi tidak yang baru.

Di Startup.cs yang dimilikinya

app.UseRouting();

dan juga

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();
            });

Ini adalah .Net Core 3.1.302 dan VSCode 1.48.0 di Windows 10.

Saya telah berpikir dari membaca tutorial bahwa yang perlu saya lakukan untuk menambahkan pengontrol adalah menulis kode (dimodelkan dengan cermat pada pengontrol yang berfungsi dan ada) dan membangunnya. Tetapi harus ada beberapa langkah tambahan untuk mendaftar atau mencatat pengontrol baru di suatu tempat?

Apakah ini metode Konfigurasi yang benar? Dari 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;
        }

Jawaban

JohnThiesen Aug 19 2020 at 06:46

Baiklah, saya memiliki sebagian jawaban untuk ini yang tidak sepenuhnya saya mengerti. Saya bekerja di VSCode. Saya membuat file baru untuk PatientListController saya dan meletakkannya di tempat yang sesuai di hieracharcy file, dan mendapatkan pesan kesalahan yang dijelaskan di atas (ditambah fakta bahwa itu tidak muncul di Swagger).

Tetapi jika saya bekerja di Visual Studio (yang kurang saya kenal), ketika saya mencoba membuat file baru, secara khusus menanyakan apa yang saya buat dan saya memilih Controller dari daftar.

Di VSCode, ternyata ia tidak tahu apa file baru ini sehingga kompilator mengabaikannya. Jadi kode yang dikompilasi tidak memiliki jejak pengontrol baru.

Dalam Visual Studio kompiler tahu bahwa saya telah menambahkan pengontrol baru dan kode yang sama persis berfungsi dengan baik dan api baru muncul di Swagger.

Jadi pasti ada cara di VSCode untuk memberi sinyal apa yang harus dilakukan dengan file baru, tetapi saya tidak tahu bagaimana membuatnya melakukan itu. Dan saya juga tidak mengerti mengapa fungsi VSCode berbeda dari Visual Studio dalam hal itu.