如何使用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指令. (编辑:东莞站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 从Asp.Net MVC 6 API返回JSON错误
- asp.net – 允许服务器/ usercontrol上的任何属性/属性
- asp.net+ajaxfileupload.js 实现文件异步上传代码分享
- asp.net – 选择框更改事件中的setTimeout
- 设置ASP.NET页面不被缓存(客户端/服务器端取消缓存方法)
- asp.net-mvc-3 – 在使用Unity容器时为此对象异常定义的无参
- asp.net-mvc – ASP.NET MVC:Action中的授权 – 建议的模式
- asp.net – Windows应用程序与Web应用程序开发
- asp.net-mvc – 为什么MVC4捆绑捆绑Knockout.js?
- asp.net-mvc – MVC Razor – 如何向自己提交表单
- asp.net – Visual Studio – 为什么.ASPX文件比
- 来自ASP.NET MVC站点的“无效的JSON原语:alihac
- asp.net-mvc – 是否有一个ASP MVC与JSTL标签等效
- asp.net-web-api – WebAPI 2属性路由启用会话状
- 如何为ASP.NET身份设置密码规则?
- asp.net-mvc – 无法在Web服务器上启动调试. Web
- 如何在服务器端缓存ASP.NET自定义HttpHandler响应
- asp.net – 在IHTTPHandler中以编程方式创建Syst
- asp.net – 测试Oracle存储过程的最简单的方法
- asp.net-mvc-3 – 剃刀引擎 – 如何根据不同的条
