我正在构建一个 web api,它有多个具有相同签名的 get/post 调用。现在我知道在多个相同调用的情况下,您通常有 2 个选择:分开到不同的控制器中,或者在您的路由中使用 {action}。我已经采用了 {action} 方法,因为它最适合我相信我的大多数控制器。但是,在我的一个控制器中,我不希望使用 action 方法。
我有这样的电话:
[HttpGet]
public Program Program(string venue, string eventId)
//api/{controller}/{venue}/{eventId}
现在我需要一个新电话
[HttpGet]
public Program ProgramStartTime(string venue, string eventId)
//api/{controller}/{venue}/{eventId}
我知道我可以为此添加一个动作名称并调用 ie
api/{controller}/{action}/{venue}/{eventId}
但我觉得它打破了预期。有没有办法我可以像
api/Content/LAA/1/PST
api/Content/LAA/1?PST
此外,如果我必须走动作路线,我目前已经有一条用于其他控制器的路线,但它只是使用 {id} 作为其唯一参数。一条新路线会与这条路线冲突吗?有没有更好的方法来设置我的路线?
config.Routes.MapHttpRoute(
name: "...",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new {id = RouteParameter.Optional}
);
config.Routes.MapHttpRoute(
name: "...",
routeTemplate: "api/{controller}/{action}/{venue}/{eventId}/{...}/{***}/{###}",
defaults: new {### = RouteParameter.Optional}
);
config.Routes.MapHttpRoute(
name: "...",
routeTemplate: "api/{controller}/{action}/{venue}/{eventId}/{...}",
defaults: new {... = RouteParameter.Optional}
);
config.Routes.MapHttpRoute(
name: "...",
routeTemplate: "api/{controller}/{action}/{venue}",
defaults: new {venue = RouteParameter.Optional}
);
我希望至少有一种方法最多有 5 个参数