我有两个Api控制器:
[RoutePrefix("api/Sql")]
public class SqlApiController : ApiController
{
[Route("{serverName?}", Name = "OutageLastWeek")]
public HttpResponseMessage GetOutageLastWeek(string serverName = "")
{
// Some code...
}
}
和
[RoutePrefix("api/Oracle")]
public class OracleApiController : ApiController
{
[Route("{serverName?}", Name = "OutageLastWeek")]
public HttpResponseMessage GetOutageLastWeek(string serverName = "")
{
// Some code...
}
}
如您所见,两个控制器中的操作具有相同的路径名称。如何使用Url.HttpRouteUrl
调用这些操作?如何指定路由前缀?
以下内容并没有给我正确的网址:
@Url.HttpRouteUrl("OutageLastWeek", new { serverName = "" })
答案 0 :(得分:3)
你不能。实际上,由于对两个不同的路由使用相同的名称,您应该会收到错误。每个路由名称必须是唯一的。没有办法解决这个问题。
答案 1 :(得分:1)
克里斯的回答有助于找到我做错的事。
路由名称不会是用于调用Web API操作的URL的一部分。它只是一个唯一的名称,您可以在使用Url.HttpRouteUrl()
创建路径的URL时参考该名称。所以,我的控制器应该如下所示:
[RoutePrefix("api/Sql")]
public class SqlApiController : ApiController
{
[Route("OutageLastWeek/{serverName?}", Name = "SqlOutageLastWeek")]
public HttpResponseMessage GetOutageLastWeek(string serverName = "")
{
// Some code...
}
}
和
[RoutePrefix("api/Oracle")]
public class OracleApiController : ApiController
{
[Route("OutageLastWeek/{serverName?}", Name = "OracleOutageLastWeek")]
public HttpResponseMessage GetOutageLastWeek(string serverName = "")
{
// Some code...
}
}
然后,我将能够生成如下网址:
@Url.HttpRouteUrl("SqlOutageLastWeek", new { serverName = "" })
@Url.HttpRouteUrl("OracleOutageLastWeek", new { serverName = "" })