gpt4 book ai didi

c# - 在不耦合客户端和服务器的情况下将 OData 添加到 Web API 2

转载 作者:行者123 更新时间:2023-11-30 16:02:17 26 4
gpt4 key购买 nike

我想添加 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;
}
}

因为目前我直接在客户端查询中使用实体模型,所以客户端和服务器之间存在很强的耦合。例如,如果我想查询并获取 Content 字段中所有包含“abc”的字母,我需要路由到以下内容:

api/letters/?$filter=contains(Content,'abc')

如果明天我决定将该属性从“Content”更改为“LetterContent”,所有客户端代码都将被破坏。

我怎样才能超越它?

最佳答案

我没试过。 Thisthis可以帮助您通过使用路由器映射和 Controller 选择器将查询 url 映射到实际 Controller ,您可以在其中将 LetterDto 映射到 LetterEntity

关于c# - 在不耦合客户端和服务器的情况下将 OData 添加到 Web API 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37778927/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com