在dotnet核心中,我试图创建一个webapi端点,该端点在控制器名称之前具有一个值。 例如:
模板:“ api / {AccountId} / [controller]”
端点“ api / 435ABC / Reports / EndOfYear”
我已经看到了许多有关如何在MVC和Framework 4.x中执行此操作的示例,但是对于WebApi来说却不是很多,并且我在控制器名称之前设置了参数。
答案 0 :(得分:1)
在属性路由中,您应将控制器路由更改为[Route("api")]
,以接受来自https://example.com/api
的所有呼叫。
注意:它将影响 Reports 控制器内的所有路由。
[Route("api")]
public class ReportsController : ApiController
然后使用如下所示的route属性装饰您的动作:
[Route("{id}/[controller]/[action]")]
通过这种方式,您可以使用https://example.com/api/435ABC/Reports/EndOfYear
调用操作方法。
在基于会议的路由中,您应该仅以 UseMvc 方法添加路由,并从控制器和操作中删除 Route 属性:
app.UseMvc(routes =>
{
routes.MapRoute(name: "default", template: "api/{controller=Home}/{action=Index}"); // this line specifies default route
routes.MapRoute(name: "Reports", template: "api/{id}/{controller=Reports}/{action=EndOfYear}"); // this line specifies your custom route
});