如何解决请求路径与支持的文件类型不匹配
我是.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。
我从阅读教程中想到,添加控制器所需要做的就是编写代码(在现有的工作控制器上紧密建模)并构建它。但是必须有一些其他步骤才能在某个地方注册或登录新控制器吗?
这是正确的Configure方法吗?从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",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。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。