将 OData 查询转换为数据合同模型类



我有一个n层应用程序。我已经在后端的内部类型与我在 webAPI 中公开的前端模型之间解耦了模型。

我正在尝试使用 ODataQueryOptions 在前端使用查询,我面临的问题是前端不知道我的模型的属性。是否有一种通用方法可以将 webAPI 中公开的前端名称转换为 ODataQueryOptions 所需的内部属性名称?

即我可以使用此代码从查询中获取属性名称。

 ODataQueryOptions<MyModel> queryString;
 if (queryString.OrderBy != null && queryString.OrderBy.OrderByClause != null)
 {
     foreach (OrderByNode node in queryString.OrderBy.OrderByNodes)
     {
         OrderByPropertyNode typedNode = node as OrderByPropertyNode;
     }
 }

我正在通过以下方式公开我的模型。

public class MyModel
{        
    /// <summary>
    /// Gets or Sets Name
    /// </summary>
    [DataMember(Name = "name", EmitDefaultValue = false)]
    public string Name { get; set; }
 }

当我从前端查询时,我想通过以下方式进行查询,因为这是我的 webApi 返回的内容。

 http://localhost:8888/myModel?$orderby=name desc

但是现在我必须用大写字母来做,因为它耦合到后端

http://localhost:8888/jobs?$orderby=Name desc

我必须手动编写属性之间的转换吗?或者有办法实现这一目标?

您使用的是System.Web.Http.OData还是System.Web.OData?如果使用 System.Web.OData,则已经实现了名称别名,并且可以毫不费力地执行所需的操作。

最新更新