【问题标题】:Not hitting my controller action in SPA app [closed]没有在 SPA 应用程序中点击我的控制器操作 [关闭]
【发布时间】:2018-03-29 23:26:27
【问题描述】:

我有一个带有 React 前端的 ASP.NET Core 应用程序。以下是我的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。那也没用。

我在这里错过了什么?

【问题讨论】:

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


    【解决方案1】:

    如果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"),那么Test() 操作可以通过http://localhost:123/home/test url 到达。如果要保持控制器级别属性,则将TestAction() 的路由属性从[Route("test")] 更改为[Route("/test")] 将使http://localhost:123/test 到达TestAction()

    如果这仍然没有帮助,请使用HomeController 的完整代码更新问题。

    【讨论】:

    • 这是我的一个愚蠢错误,但我接受了您的回复作为答案,因为其中有很多很好的解释。感谢您的详细回答。
    猜你喜欢
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 2013-11-13
    • 1970-01-01
    • 2011-04-11
    相关资源
    最近更新 更多