요청 경로가 지원되는 파일 형식과 일치하지 않습니다.
.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;
}
답변
글쎄, 나는 이것에 대해 완전히 이해하지 못하는 부분적인 대답을 가지고 있습니다. 나는 VSCode에서 일하고 있었다. 내 PatientListController에 대한 새 파일을 만들고 파일 계층 구조의 적절한 위치에 배치하고 위에서 설명한 오류 메시지를 받았습니다 (Swagger에 표시되지 않았다는 사실 포함).
하지만 내가 익숙하지 않은 Visual Studio에서 작업하는 경우 새 파일을 만들려고 할 때 구체적으로 무엇을 만들고 있는지 묻고 목록에서 Controller를 선택합니다.
VSCode에서는 분명히이 새 파일이 무엇인지 모르기 때문에 컴파일러는이를 무시합니다. 따라서 컴파일 된 코드에는 새 컨트롤러의 흔적이 없습니다.
Visual Studio에서 컴파일러는 내가 새 컨트롤러를 추가했으며 정확히 동일한 코드가 잘 작동하고 새 API가 Swagger에 표시된다는 것을 알고 있습니다.
따라서 VSCode에는 새 파일로 무엇을해야하는지 신호를 보내는 방법이 있어야하지만 그렇게하는 방법을 모르겠습니다. 그리고 그 점에서 VSCode가 Visual Studio와 다르게 작동하는 이유도 이해하지 못합니다.