c#-将OData添加到Web API 2,而无需耦合客户端和服务器
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-将OData添加到Web API 2,而无需耦合客户端和服务器,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1930字,纯文字阅读大概需要3分钟。
内容图文
![c#-将OData添加到Web API 2,而无需耦合客户端和服务器](/upload/InfoBanner/zyjiaocheng/665/e3e2d34e867d40c48726caef783b9ed0.jpg)
我想添加OData语法来查询应用程序的数据.我不想完全实现ODataController,但是拥有ApiController并实现一个支持OData查询的GET操作,如下所述:Supporting OData Query Options in ASP.NET Web API 2
我想要的示例:
public class LetterEntity
{
public int Id {get; set;}
public string Title {get; set;}
public string Content {get; set;}
public string Source {get; set;}
public DateTime SendingTime {get; set;}
public string AnotherWierdString {get; set;
...
}
public class LetterDTO
{
public int Id {get; set;}
public string Title {get; set;}
public string LetterContent {get; set;}
public string Source {get; set;}
public DateTime SendingTime {get; set;}
}
public class LetterInsideFolderDTO
{
public string Title {get; set;}
public string Source {get; set;}
}
public class LettersController : ApiController
{
// Is there a way to do something like the following?:
[HttpGet]
[Route("api/letters")]
[EnableQuery]
public IQueryable<LetterInsideFolderDTO> Get(ODataQueryOptions<LetterDTO> query)
{
IQueryable<Letter> letters = db.Letters;
var queryOnEntites = // Convert the query to work on the entities somehow? - This is where I need help!!
var afterQuery = query.ApplyTo(letters)
IQueryable<LetterInsideFolderDTO> dtos = afterQuery.ProjectTo<LetterInsideFolderDTO>(afterQuery)
return dtos;
}
}
由于目前我直接在客户端查询中使用实体模型,因此客户端与服务器之间存在很强的耦合.
例如,如果我要查询并获取“内容”字段中所有具有“ abc”的字母,则需要路由到以下内容:
api/letters/?$filter=contains(Content,'abc')
如果明天我决定将该属性从“ Content”更改为“ LetterContent”,则所有客户端代码都将被破坏.
我该如何超越?
解决方法:
与其直接公开您的实体模型,不如创建与每个实体模型相对应的ViewModel.它们不过是简单的类,它们具有相同或仅需要的属性,我们希望将它们公开给外界.以这种方式实现后,您的实体模型属性可能会更改,但ViewModels可以保持不变.您还将解决安全方面的问题,即不要将实体的每个属性都暴露给最终客户.
实体模型和ViewModel之间的映射必须由您自己或由诸如AutoMapper之类的对象-对象映射器完成.
内容总结
以上是互联网集市为您收集整理的c#-将OData添加到Web API 2,而无需耦合客户端和服务器全部内容,希望文章能够帮你解决c#-将OData添加到Web API 2,而无需耦合客户端和服务器所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。