2017-02-16 52 views
0

我正在尝试创建一个OData函数,该函数返回多个资源类型的引用列表(id /名称值)。我如何使用Url.Route OData路由

每个引用还将包含一个“ResourceUrl”属性,其中包含资源url的相对路径。

举例来说,这是我希望看到我使用Url.Route("odata", new { controller = "users", id = user.Id })

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

电流,但结果返回null

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

我在做什么错?

回答

0

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

相反Url.HttpRouteUrl的,我用Url.Route

扩展方法

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()))