ASP.NET Core MVC通配符路由不适用于与正在运行的另一个安装程序相同的设置

时间:2018-08-30 11:17:30

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

我正在开发三个Web应用程序,它们是大型系统的一部分。这些是具有API的单页应用程序,因此,对于非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

1 个答案:

答案 0 :(得分:1)

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

此问题已解决。我看了上面的代码,该代码是通过家庭控制器路由的。这导致我看了HomeController。应用程序之间的区别在于,不起作用的应用程序具有MVC路由属性,并且在Home控制器中添加了“ /”。

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