Jalur permintaan tidak cocok dengan jenis file yang didukung
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
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.