Chr*_*our 6 asp.net odata razor asp.net-web-api
我有一个ASP.NET MVC 4应用程序,我正在将OData API合并到其中.这是运行具有更大OData支持的2012.2内容.
我没有使用单独的区域...这可能是一个错误,但我的应用程序很小,区域似乎有点过分.
我的控制器设置正确,我的Segments集合的示例路径(段是我的域中的类型)是"/ odata/Segments".这按预期加载并正在工作.
在我的主页我想要的链接添加到使用Razor的Html.ActionLink(或RouteLink)这个资源,但它似乎OData的控制器布局确实与这些方法并不完全工作,因为在注册时,控制器与"OData的"前缀WebAPIConfig:
config.Routes.MapODataRoute("OData Route", "odata", model );
Run Code Online (Sandbox Code Playgroud)
我可以通过假装有一个odata控制器来欺骗该方法来构造正确的url,当时肯定没有一个(据我所知)这样的东西:
@Html.RouteLink("Segments", "Segments", "odata")
Run Code Online (Sandbox Code Playgroud)
但这似乎是一个黑客.
我不太了解ASP.NET路由管道,足以理解传递给MapODataRoute的前缀如何被合并到MVC链中,这样我就可以使用"正确"的剃刀方法"正确".
只是为了踢,这是我的SegmentsController:
public class SegmentsController : EntitySetController<Segment, long>
{
private MarketerDB db = new MarketerDB();
// GET api/segments
override public IQueryable<Segment> Get()
{
return db.Segments.AsQueryable();
}
protected override Segment GetEntityByKey(long key)
{
return db.Segments.Find(key);
}
public IQueryable<Affiliate> GetAffiliates([FromODataUri] long key)
{
return this.GetEntityByKey(key).Affiliates.AsQueryable();
}
protected override void Dispose(bool disposing)
{
db.Dispose();
base.Dispose(disposing);
}
}
Run Code Online (Sandbox Code Playgroud)
我们有一个ODataLink方法,System.Web.Http.UrlHelper但我们忘了在MVC中添加一个System.Web.Mvc.UrlHelper.直到我们添加它,您可以使用此扩展方法,
namespace System.Web.Mvc
{
public static class UrlHelperExtensions
{
private static IODataPathHandler _pathHandler = new DefaultODataPathHandler();
public static string ODataUrl(this UrlHelper urlHelper, string routeName, params ODataPathSegment[] segments)
{
string odataPath = _pathHandler.Link(new ODataPath(segments));
return urlHelper.HttpRouteUrl(
routeName,
new RouteValueDictionary() { { ODataRouteConstants.ODataPath, odataPath } });
}
}
}
Run Code Online (Sandbox Code Playgroud)
通过做类似的事情从你的剃刀视图中调用它(假设有一个实体集客户,你想把导航链接放到客户的订单上(42)),
@Url.ODataUrl("odata", new EntitySetPathSegment("customers"), new KeyValuePathSegment("42"), new NavigationPathSegment("orders"))
Run Code Online (Sandbox Code Playgroud)
确保你@using System.Web.Http.OData.Routing的剃须刀视图中有一个指令.
| 归档时间: |
|
| 查看次数: |
1916 次 |
| 最近记录: |