İstek yolu, desteklenen bir dosya türüyle eşleşmiyor

Aug 18 2020

.Net Core MVC'de yeniyim. Mevcut bir projeye bir denetleyici eklemeye çalışıyorum, ancak hata alıyorum

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

Bu, uygulamanın kendisine bile ulaşmadığını, ancak bir yerlerde bir tür ara katman yazılımında engellendiğini düşündürüyor. Veya neden dosya türü hakkında şikayet ediyor? Burada "tür" yoktur, sadece URL içeren bir dizedir.

VSCode'da yeni denetleyiciyi mevcut denetleyicilerle aynı klasöre ekledim ve yapı iyi çalıştı. Ctrl-F5 onu tarayıcımda açar ve eski API'leri (en azından denediklerimi) çalıştırabilirim, ancak yenisini değil; yeni denetleyiciye bir URL kullanırsam bir 404 verir.

Bu aynı zamanda Swagger'ı da kurdu ve Swagger eski API'leri gösteriyor ama yenisini göstermiyor.

Startup.cs dosyasında

app.UseRouting();

ve ayrıca

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

Bu, Windows 10'da .Net Core 3.1.302 ve VSCode 1.48.0'dır.

Öğreticileri okurken bir denetleyici eklemek için yapmam gereken tek şeyin kodu yazmak (mevcut, çalışan bir denetleyiciye yakın bir şekilde modellenmiş) ve onu oluşturmak olduğunu düşünmüştüm. Ancak yeni denetleyiciyi bir yere kaydetmek veya günlüğe kaydetmek için bazı ek adımların olması gerekir?

Bu doğru Yapılandırma yöntemi mi? Startup.cs sitesinden

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

Yanıtlar

JohnThiesen Aug 19 2020 at 06:46

Tamamen anlamadığım, buna kısmi bir cevabım var. VSCode'da çalışıyordum. PatientListController'ım için yeni bir dosya oluşturdum ve onu dosya hiyerarşisinde uygun yere koydum ve yukarıda açıklanan hata mesajlarını (artı Swagger'da görünmediği gerçeğini) aldım.

Ancak (daha az aşina olduğum) Visual Studio'da çalışırsam, yeni bir dosya oluşturmaya çalıştığımda, özellikle ne oluşturduğumu sorar ve listeden Denetleyici'yi seçerim.

VSCode'da, görünüşe göre bu yeni dosyanın ne olduğunu bilmiyor ve bu nedenle derleyici onu yok sayıyor. Yani derlenen kodda yeni denetleyicinin izi yok.

Visual Studio'da derleyici, yeni bir denetleyici eklediğimi ve aynı kodun gayet iyi çalıştığını ve yeni api'nin Swagger'da göründüğünü bilir.

Yani VSCode'da yeni dosyayla ne yapılacağına işaret etmenin bir yolu olmalı, ancak bunu nasıl yapacağımı bilmiyorum. Ayrıca VSCode'un bu açıdan neden Visual Studio'dan farklı çalıştığını da anlamıyorum.