İstek yolu, desteklenen bir dosya türüyle eşleşmiyor
.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
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.