リクエストパスがサポートされているファイルタイプと一致しません

Aug 18 2020

.Net CoreMVCは初めてです。既存のプロジェクトにコントローラーを追加しようとしていますが、エラーが発生します

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

これは、アプリ自体に到達するのではなく、どこかのミドルウェアでブロックされていると私に思わせます。または、なぜファイルタイプについて文句を言うのですか?ここには「タイプ」は含まれていません。URLを含む文字列です。

VSCodeで、既存のコントローラーと同じフォルダーに新しいコントローラーを追加しましたが、ビルドは正常に機能しました。Ctrl-F5を押すとブラウザに表示され、古いAPI(少なくとも試したもの)は実行できますが、新しいAPIは実行できません。新しいコントローラーへのURLを使用すると、404が返されます。

これにもSwaggerがインストールされており、Swaggerは古いAPIを表示しますが、新しいAPIは表示しません。

Startup.csには

app.UseRouting();

そしてまた

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

これは、Windows10の.NetCore3.1.302およびVSCode1.48.0です。

チュートリアルを読んで、コントローラーを追加するために必要なのは、コード(既存の動作中のコントローラーを厳密にモデル化したもの)を記述してビルドすることだけだと思っていました。しかし、新しいコントローラーをどこかに登録またはログに記録するには、追加の手順が必要ですか?

これは正しい構成方法ですか?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;
        }

回答

JohnThiesen Aug 19 2020 at 06:46

まあ、私は完全には理解していないこれに対する部分的な答えがあります。私はVSCodeで働いていました。PatientListController用に新しいファイルを作成し、ファイル階層の適切な場所に配置すると、上記のエラーメッセージが表示されました(さらに、Swaggerに表示されなかったという事実もあります)。

しかし、私がVisual Studio(あまり慣れていない)で作業している場合、新しいファイルを作成しようとすると、何を作成しているかを具体的に尋ねられ、リストからコントローラーを選択します。

VSCodeでは、明らかにこの新しいファイルが何であるかを知らないため、コンパイラーはそれを無視します。したがって、コンパイルされたコードには、新しいコントローラーの痕跡がありません。

Visual Studioでは、コンパイラーは、私が新しいコントローラーを追加したことを認識しており、まったく同じコードが正常に機能し、新しいAPIがSwaggerに表示されます。

したがって、VSCodeには、新しいファイルをどう処理するかを通知する方法が必要ですが、それを実行する方法がわかりません。また、その点でVSCodeの機能がVisualStudioと異なる理由もわかりません。