我正在使用.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
参数,在解析请求时应该影响路由的优先级。更改此值不会影响标记帮助程序的输出。
答案 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相同),它将生成名称后缀为Stores
或Store
的操作:
// 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为我生成的名称(GetStores
,PostStore
等)。有效。我不知道为什么。可能是错误,或者是我对路由知之甚少,但这是the issue on Github。