요청 경로가 지원되는 파일 형식과 일치하지 않습니다.

Aug 18 2020

.Net Core MVC를 처음 사용합니다. 기존 프로젝트에 컨트롤러를 추가하려고하는데 오류가 발생합니다.

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)를 실행할 수 있지만 새 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();
            });

이것은 Windows 10의 .Net Core 3.1.302 및 VSCode 1.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에서 작업하는 경우 새 파일을 만들려고 할 때 구체적으로 무엇을 만들고 있는지 묻고 목록에서 Controller를 선택합니다.

VSCode에서는 분명히이 새 파일이 무엇인지 모르기 때문에 컴파일러는이를 무시합니다. 따라서 컴파일 된 코드에는 새 컨트롤러의 흔적이 없습니다.

Visual Studio에서 컴파일러는 내가 새 컨트롤러를 추가했으며 정확히 동일한 코드가 잘 작동하고 새 API가 Swagger에 표시된다는 것을 알고 있습니다.

따라서 VSCode에는 새 파일로 무엇을해야하는지 신호를 보내는 방법이 있어야하지만 그렇게하는 방법을 모르겠습니다. 그리고 그 점에서 VSCode가 Visual Studio와 다르게 작동하는 이유도 이해하지 못합니다.