【发布时间】:2020-09-14 12:43:10
【问题描述】:
我试着做一些简单的事情。我想要不同的动作名称和不同的方法名称:
public class SuperController: Controller
{
[HttpGet("dosth")]
public IActionResult DoSomethingWithThoseParameters(int id, string token)
{
}
}
看看控制器上没有Route属性。
在这种情况下,标签助手asp-action 可以完美运行。但是我以为我的动作dosth会放在:localhost/Super/dosth
但事实并非如此。所以我想我可能应该为整个控制器设置路由,如下所示:
[Route("[controller]")]
public class SuperController: Controller
{
[HttpGet("dosth")]
public IActionResult DoSomethingWithThoseParameters(int id, string token)
{
}
public IActionResult Register()
{
return View();
}
}
但是现在asp-action 停止工作了。例如:
<a asp-controller="Super" asp-action="Register">
创建锚点到:localhost/Super 而不是:localhost/Super/Register
当我从控制器中删除 Route 标记时,它再次起作用。
我的映射是按照标准配置的:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages();
});
那么,当整个控制器上有Route 属性时,asp-action 怎么会不起作用
【问题讨论】: