c# - ASP.NET Core MVC 通配符路由无法使用与另一个正在工作的设置相同的设置

标签 c# asp.net-mvc asp.net-core routing asp.net-core-mvc

我正在开发三个 Web 应用程序,它们是一个更大系统的一部分。这些是带有 API 的单页应用程序,因此我有指向我的主 Controller 的非 API 操作的通配符路由。

对于其中两个应用程序,这工作正常,但对于第三个应用程序,重定向不起作用,我在尝试访问前端路由时只收到 404 返回。据我所知,设置是相同的,但我完全不明白为什么它不起作用。

我使用的是屏幕截图而不是代码片段,因此我可以并排显示设置(在左侧工作,不在右侧工作)。

如您所见,代码的关键部分在两个应用程序中是相同的,只是一个有效,一个无效。

我错过了什么?我还应该去哪里看?非常感谢任何关于如何调试它的指导。

.csproj enter image description here

Startup.cs enter image description here

这是代码的关键部分,如您所见,两处完全相同:

app.UseMvc(routes =>
{
    routes.EnableDependencyInjection();
    routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");
});
app.MapWhen(x => !x.Request.Path.Value.StartsWith("/api", StringComparison.OrdinalIgnoreCase), builder =>
{
    builder.UseMvc(routes =>
    {
        routes.MapRoute("spa-fallback", "{*url}", new { controller = "Home", action = "Index" });
    });
});

Program.cs enter image description here

Web.config enter image description here

最佳答案

app.UseMvc(routes =>
{
    routes.EnableDependencyInjection();
    routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");
});
app.MapWhen(x => !x.Request.Path.Value.StartsWith("/api", 
StringComparison.OrdinalIgnoreCase), builder =>
{
    builder.UseMvc(routes =>
    {
        routes.MapRoute("spa-fallback", "{*url}", new { controller = "Home", action = 
"Index" });
    });
});

这已经解决了。我查看了上面与家庭 Controller 一起路由的代码。这促使我查看 HomeController。应用程序之间的区别在于,不工作的应用程序在 Home Controller 中具有 MVC Route 属性,并添加了“/”。

[Route("/")] // remove this line
public class HomeController : Controller

关于c# - ASP.NET Core MVC 通配符路由无法使用与另一个正在工作的设置相同的设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52095726/

相关文章:

c# - 如何将多个文件添加到播放列表

c# - Redis 在 .net MVC 中压缩字符串值

c# - 将同一端口(例如虚拟应用程序)上的监听器与Kestrel相乘

c# - SaasKit.Multitenancy 与 Asp Net Core 2.2 不兼容?

.net - 从 Linux 上的 .net 核心应用程序使用 ntlm 身份验证访问 MS SQL Server

c# 构造函数 vs 初始​​化

c# - 单选按钮的绑定(bind)问题

c# - 如何创建一个可以从 c# 调用的 cpp 函数,函数作为参数

asp.net-mvc - 在 MVC Identity (2.0.1) 中 regenerateIdentity/validateInterval 持续时间后忽略 ExpireTimeSpan

c# - 如何从同一 View 执行 3 种不同的 Controller 方法