如何使用ASP.NET MVC Web API OData链接到Razor中的OData集合
我有一个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 ); 我可以通过假装有一个odata控制器来欺骗该方法来构造正确的url,当时肯定没有一个(据我所知)这样的东西: @Html.RouteLink("Segments","Segments","odata") 但这似乎是一个黑客. 我不太了解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); } } 解决方法我们在System.Web.Http.UrlHelper上有一个 ODataLink方法,但是我们忘了在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 } }); } } } 通过做类似的事情从你的剃刀视图中调用它(假设有一个实体集客户,你想把导航链接放到客户的订单上(42)), @Url.ODataUrl("odata",new EntitySetPathSegment("customers"),new KeyValuePathSegment("42"),new NavigationPathSegment("orders")) 确保你的剃刀视图中有一个@using System.Web.Http.OData.Routing指令. (编辑:4S站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 什么是在asp.net中301重定向更推荐的方法?
- asp.net-mvc-3 – 如何在页面提交ASP.Net MVC时捕获哪个单选
- asp.net+Ajax 文本文件静态分页实现代码
- asp.net – 请求URL在IIS 7中无效
- asp.net-mvc-4 – MVC 4 DropDownListFor错误 – 没有具有密
- ASP.NET页面验证
- ASP.NET代码隐藏中的当前工作目录 – 我们可以依赖它吗?
- 在ASP.NET中,什么决定了HostingEnvironment.IsDevelopmentE
- asp.net-mvc – 从视图到控制器POST信用卡数据是否安全?
- asp.net – 单个应用程序中的多个母版页
- ASP.Net:为什么我的按钮的点击/命令事件没有在转
- asp.net-mvc – MVC导航到不同的控制器视图
- asp.net – 如何在selectindexchanged下拉列表后
- asp.net-mvc – 从MVC版本1迁移后,ASP.NET MVC 2
- asp.net – 增加IIS7 / Win7 Pro上的最大上传文件
- asp.net-mvc – 如何忽略ASP.NET MVC 4中特定Vie
- asp.net-mvc-4 – .net 4.5 ASP.Net web API JSO
- asp.net-mvc – 为什么我的视图模型中的内部成员
- asp.net-mvc – 使用ASP.Net MVC中的模型绑定器更
- ASP.NET汉字转拼音 - 输入汉字获取其拼音的具体实