【问题标题】:Get Relative Path from Route Name从路由名称获取相对路径
【发布时间】:2016-04-18 19:52:10
【问题描述】:

当路径被命名时...

[Route("api/[controller]/{id}/Existing", Name = "ExistingOrdersLink")]
public class OrdersController : Controller {...}

...使用名称创建绝对路径很容易:

var address = Url.Link("ExistingOrdersLink", new { id = 22 });

但是,我需要能够从 Route 名称生成 相对 路径。所以我写了这样的代码:

//Is there a built-in mechanism for this?
string partial = new Uri(Url.Link("ExistingOrdersLink", new { id = id })).PathAndQuery;

上述方法可行,但在 ASP.NET Core 中,是否有更直接的方法来获得相同的结果?

上下文

我为什么需要这个?我制作的一些控制器实际上是通用的:

[Route("api/Subscribers/{id}/[controller]", "SubscriberLink")]
[Route("api/Organization/{id}/[controller]", "OrganizationLink")]
public class OrdersController<T> : Controller where T : IOrder
{
    private ICommand<Order<T>> createOrder;

    protected OrdersController(ICommand<Order<T>> createOrder)
    {
        this.createOrder = createOrder;
    }

    [HttpPost("{otype}")]
    public async Task<IActionResult> Create(
        Guid id,
        [FromBody] Order<T> order)
    {
        order.CustomerOrderId = Guid.NewGuid();
        createOrder.Handle(order);

        string[] segs = Request.Path.Value.Split(new char[] { '/' },StringSplitOptions.RemoveEmptyEntries);

        //This will become either "SubscriberLink" or "OrganizationLink"
        string route = $"{segs[1]}Link";

        //Is there a built-in mechanism for this?
        string partial = new Uri(Url.Link(route, new { id = id })).PathAndQuery;

        partial = $"{partial}/{order.CustomerOrderId}";
        CreatedResult reply = Created(partial, null);

        return reply;
    }
}

【问题讨论】:

    标签: c# asp.net asp.net-core url-routing


    【解决方案1】:

    我想你正在寻找Url.RouteUrl 示例:

    Url.RouteUrl("ExistingOrdersLink", new { id = 22});
    

    【讨论】:

    • 您的答案是正确的,尽管该函数的 XML 文档不正确。它声明“生成完全限定或绝对 URL ...”。如果文档正确,我不会问这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 2011-12-11
    • 2016-09-08
    • 2011-08-11
    • 2010-09-21
    • 2023-03-22
    相关资源
    最近更新 更多