没有在 SPA 应用程序中点击我的控制器操作

Not hitting my controller action in SPA app

我有一个带有 React 前端的 ASP.NET 核心应用程序。以下是我的Startup.cs.

中定义的路由
app.UseMvc(routes =>
{
    routes.MapRoute(
       name: "default",
       template: "{controller=Home}/{action=Index}/{id?}");

    routes.MapSpaFallbackRoute(
       name: "spa-catchall",
       defaults: new { controller = "Home", action = "Index" });
});

我在我的 HomeController 中创建了一个测试操作,它将提供一个静态页面,但我没有点击它。我总是以 Home/Index 结束,它被定义为包罗万象的路线。

这是我在HomeController下的测试动作:

[Route("test")]
[AllowAnonymous]
public IActionResult Test()
{
   return View();
}

我正试图通过转到 http://localhost:123/test 来实现它,但它不起作用。我也试过http://localhost:123/home/test。那也没用。

我在这里错过了什么?

如果Home控制器定义为:

public class HomeController : Controller
{
    public IActionResult Index()
    {
        return View();
    }

    [Route("test")]
    [AllowAnonymous]
    public IActionResult Test()
    {
        return View();
    }
}

然后请求 http://localhost:123/test 应该点击 Test() 操作。属性路由优先于常规路由。由于您已将 Route 属性用于 Test 操作,因此您在 UseMvc 调用中映射的路由并不重要,只是未使用。

为什么 http://localhost:123/test 没有命中的唯一解释是你在控制器级别上也有 Route 属性。如果是 Route("home"),则 http://localhost:123/home/test url 可以达到 Test() 操作。如果要保留控制器级别属性,则将 TestAction() 的路由属性从 [Route("test")] 更改为 [Route("/test")] 将使 http://localhost:123/test 到达 TestAction().

如果仍然没有帮助,请使用 HomeController.

的完整代码更新问题