我有一个JSON API动作过滤器拦截输出插入超媒体URL。
我正在注射Microsoft.AspNet.Mvc.ApiExplorer.IApiDescriptionGroupCollectionProvider
,让我可以访问所有路线。
对于已知操作,我有Microsoft.AspNet.Mvc.ApiExplorer.ApiDescription.RelativePath
的路径相对路径。例如:
/articles/{id}
我也有路线的参数,在这种情况下它只是{id}
。
我需要将相对路线转换为真实的Url。例如,对于id
的2,我希望:
/articles/2
ASP.NET 5 / Core / MVC 6中是否有功能可以让我获取参数和路由模板并创建一个真正的Url?
感谢您的评论,这是一些测试的结果。 @dealdiane是正确的Hyprlinkr与DNX / aspnet核心不兼容。我调查了TypedRouting,但帮助者不使用路径模板。
我尝试Microsoft.AspNetCore.Mvc.Routing.UrlHelper
来创建链接。您可以像任何其他服务一样注入IUrlHelper
并使用扩展方法,例如:
UrlHelper helper; // Constructor injected
ApiDescription action; // I have this as a starting point
var actionDescriptor = (ControllerActionDescriptor)action.ActionDescriptor;
var actionName = actionDescriptor.Name;
var controllerName = actionDescriptor.ControllerName;
object values = new {id};
var url = helper.Action(actionName, controllerName, values);
不幸的是,url
设置为:
/articles?id=2
哪个不正确。