Le chemin de la demande ne correspond pas à un type de fichier pris en charge
Je suis nouveau sur .Net Core MVC. J'essaye d'ajouter un contrôleur à un projet existant, mais j'obtiens l'erreur
dbug: Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware[4]
The request path https://localhost:5001/api/admin/... does not match a supported file type
Cela me fait penser qu'il ne s'agit même pas d'accéder à l'application elle-même, mais d'être bloqué dans une sorte de middleware quelque part. Ou pourquoi se plaint-il du type de fichier? Il n'y a pas de "type" impliqué ici, c'est juste une chaîne contenant une URL.
Dans VSCode, j'ai ajouté le nouveau contrôleur dans le même dossier avec les contrôleurs existants, et la construction a bien fonctionné. Ctrl-F5 l'affiche dans mon navigateur et je peux exécuter les anciennes API (du moins celles que j'ai essayées) mais pas la nouvelle; il donne un 404 si j'utilise une URL vers le nouveau contrôleur.
Swagger est également installé et Swagger affiche les anciennes API mais pas la nouvelle.
Dans le Startup.cs, il a
app.UseRouting();
et aussi
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();
});
Il s'agit de .Net Core 3.1.302 et VSCode 1.48.0 sous Windows 10.
En lisant des didacticiels, j'avais pensé que tout ce que j'avais à faire pour ajouter un contrôleur était d'écrire le code (calqué sur un contrôleur existant et fonctionnel) et de le construire. Mais il doit y avoir une étape supplémentaire pour enregistrer ou enregistrer le nouveau contrôleur quelque part?
Est-ce la bonne méthode Configure? À partir de 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;
}
Réponses
Eh bien, j'ai une réponse partielle à cela que je ne comprends pas entièrement. Je travaillais dans VSCode. J'ai créé un nouveau fichier pour mon PatientListController et je l'ai mis à l'endroit approprié dans la hiérarchie du fichier, et j'ai reçu les messages d'erreur décrits ci-dessus (plus le fait qu'il n'apparaissait pas dans Swagger).
Mais si je travaille dans Visual Studio (avec lequel je suis moins familier), lorsque j'essaie de créer un nouveau fichier, il me demande spécifiquement ce que je crée et je choisis Controller dans la liste.
Dans VSCode, apparemment, il ne sait pas ce qu'est ce nouveau fichier et donc le compilateur l'ignore simplement. Le code compilé n'a donc aucune trace du nouveau contrôleur.
Dans Visual Studio, le compilateur sait que j'ai ajouté un nouveau contrôleur et que le même code fonctionne parfaitement et que la nouvelle API apparaît dans Swagger.
Il doit donc y avoir un moyen dans VSCode de signaler ce qu'il faut faire avec le nouveau fichier, mais je n'ai aucune idée de comment le faire. Et je ne comprends pas non plus pourquoi VSCode fonctionne différemment de Visual Studio à cet égard.