锚标记助手链接到API控制器

时间:2018-05-08 17:32:13

标签: asp.net-mvc asp.net-web-api asp.net-core asp.net-core-mvc

我正在使用.Net Core 2.0开发2017 Visual Studio CE中的项目。我为我的Web API控制器创建了一个 API 目录,为我的标准MVC控制器创建了一个 Controllers 目录。

我在每个目录中都有一个 StoresController API 目录中的那个将Route属性指定为[Route("api/[controller]")] Controllers 目录中的那个没有Route属性;它依赖于 Startup.cs 中设置的默认路由。

我使用内置代码助手在我的编辑视图中创建了以下删除链接:<a asp-action="Delete" asp-controller="Stores" asp-route-id="@Model.Id" class="btn btn-danger">Delete</a>

出于某种原因,这会链接到 / api / stores / {id} ,而不是 / stores / delete / {id} 。有没有办法配置标签助手使用默认的MVC路由而不是API路由?或者我是否需要重命名类/动作名称?

更新: Route属性有一个Order参数,在解析请求时应该影响路由的优先级。更改此值不会影响标记帮助程序的输出。

2 个答案:

答案 0 :(得分:0)

您可以使用订单向控件添加多个路径,并使用第一个路径添加锚标记助手。

[Route("[controller]/[action]", Order = 0)] // Same as default routes
[Route("api/[controller]/[action]", Order = 1)] // Your custom route
  

默认情况下,所有已定义的路由的Order值为0,路由为   处理从最低到最高。

答案 1 :(得分:0)

已经晚了,但对我来说,它是StoresApiController中的动作名称。如果使用针对.NET Core 2.2的Visual Studio搭建API控制器(它可能与2.0相同),它将生成名称后缀为StoresStore的操作:

// this works
public ActionResult GetStores() { ... }
public string GetStore(int id) { ... }
...

但是我来自.NET Framework,以前我用没有这些后缀的方式来命名我的API方法:

// this doesn't work
public ActionResult Get() { ... }
public string Get(int id) { ... }
...

我将所有方法名称更改为Visual Studio为我生成的名称(GetStoresPostStore等)。有效。我不知道为什么。可能是错误,或者是我对路由知之甚少,但这是the issue on Github