C# 在SPA应用程序中未点击我的控制器操作
我有一个带有React前端的ASP.NET核心应用程序。以下是myC# 在SPA应用程序中未点击我的控制器操作,c#,asp.net,asp.net-core,asp.net-core-routing,C#,Asp.net,Asp.net Core,Asp.net Core Routing,我有一个带有React前端的ASP.NET核心应用程序。以下是myStartup.cs中定义的路由 app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); routes.MapSpaFallbackRoute( name: "spa-catchall",
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()
操作。属性路由比传统路由具有优先级。因为您已经为Test
操作使用了Route
属性,所以无论您在UseMvc
调用中映射了什么路由,这些路由都不会被使用
为什么http://localhost:123/test
没有命中,是因为在控制器级别上也有路由
属性。如果是Route(“home”)
则Test()可以通过http://localhost:123/home/test
url。如果要保留控制器级属性,则将TestAction()
的路由属性从[route(“test”)]
更改为[route(/test”)]
将使http://localhost:123/test
到达TestAction()
如果这仍然没有帮助,请用HomeController
的完整代码更新问题。我犯了一个愚蠢的错误,但我接受了你的回答,因为其中有很多很好的解释。我感谢你详细的回答。