我有一个基本路由的简单API。它是使用默认的Visual Studio 2015 ASP.NET Core API模板设置的。
我有这个控制器和动作:
[Route("api/[controller]")]
public class DocumentController : Controller
{
[HttpGet("info/{Id}")]
public async Task<Data> Get(string Id)
{
//Logic
}
}
为了达到此方法,我必须致电GET /api/document/info/some-id-here
。
在该方法中,.NET Core是否可以以字符串形式检索完整路径?
所以我可以这样做:
var myRoute = retrieveRoute();
// myRoute = "/api/document/info/some-id-here"
答案 0 :(得分:28)
您可以使用.Net Core中的请求选项(HttpRequest)获取完整的请求网址。
var route = Request.Path.Value;
你的最终代码。
[Route("api/[controller]")]
public class DocumentController : Controller
{
[HttpGet("info/{Id}")]
public async Task<Data> Get(string Id)
{
var route = Request.Path.Value;
}
}
结果路线:&#34; / api / document / info / some-id-here&#34; //例如
答案 1 :(得分:7)
您还可以要求MVC根据当前路线值创建新的路线网址:
[Route("api/[controller]")]
public class DocumentController : Controller
{
[HttpGet("info/{Id}")]
public async Task<Data> Get(string Id)
{
//Logic
var myRoute = Url.RouteUrl(RouteData.Values);
}
}
Url.RouteUrl
是一种帮助方法,可让您在给定任何路径值的情况下构建路径URL。 RouteData.Values
为您提供当前请求的路由值。
答案 2 :(得分:0)
如果您希望使用任何 HttpMethod 属性指定的 API 控制器上的原始路由模板,则可以这样做:
var routeAttribute = Url.ActionContext.ActionDescriptor.EndpointMetadata.First(d => d is HttpMethodAttribute);
var routeTemplate = ((HttpMethodAttribute)routeAttribute).Template;
如果原始路由属性是:[HttpGet("Self/{id}")]
routeTemplate 值为:"Self/{id}"
答案 3 :(得分:-1)
Url.ActionContext.ActionDescriptor.AttributeRouteInfo.Template
"v{version}/{cardId}/cardsTest" {$1}