如何将Url.Route用于OData路由

时间:2017-02-16 18:35:06

标签: c# .net asp.net-web-api2 odata url-routing

我尝试创建一个OData函数,该函数返回多个资源类型的引用列表(id / name值)。

每个参考文献还包含一个" ResourceUrl" property,具有资源的相对路径。

例如,这就是我想要看到的内容

    {
      "id": 4438,
      "name": "Some Dude",
      "resourceUri": "/odata/Users(4438)
    },

当前我使用Url.Route("odata", new { controller = "users", id = user.Id })但结果是返回null

包含该函数的控制器和UsersController都继承自ODataController。

我做错了什么?

1 个答案:

答案 0 :(得分:3)

我能够通过稍微修改这个问题的答案来解决我的问题:How to Link to OData Collection in Razor using ASP.NET MVC Web API OData

我使用Url.Route而不是Url.HttpRouteUrl

扩展方法

public static class UrlHelperExtensions
{
    private static IODataPathHandler _pathHandler = new DefaultODataPathHandler();

    public static string ODataUrl(this UrlHelper urlHelper, string routeName, params ODataPathSegment[] segments)
    {
        var odataPath = _pathHandler.Link(new ODataPath(segments));
        return urlHelper.Route(routeName, new RouteValueDictionary() { { ODataRouteConstants.ODataPath, odataPath } });
    }
}

<强>用法

Url.ODataUrl("odata", new EntitySetPathSegment("Users"), new KeyValuePathSegment(u.UserId.ToString()))