如何在使用备用属性名称时查询 OData

use*_*279 4 c# odata

我正在使用 Newtonsoft 更改 web api json 输出上的属性名称。

public class User : IEntity
{
    [Newtonsoft.Json.JsonProperty(PropertyName = "user_name"]
    public string Username { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我已启用 odata 查询,以便我可以向请求添加查询。

[HttpGet]
[Route("api/users")]
[EnableQuery]
public IQueryable<User> GetUser()
{
    return dbContext.DbSet<User>();
}
Run Code Online (Sandbox Code Playgroud)

当我使用备用属性名称进行查询时,它失败了。

GET /api/users?$select=user_name

URI 中指定的查询无效。找不到名为“user_name”的属性

如果我使用实体模型名称Username(对公众不可见),则查询工作正常。如何在仍然使用 Newtonsoft 处理反序列化的同时解决这个问题?

jps*_*jps 7

我无法使用 Json.Property 属性实现此目的,而是通过以下方式实现:

// in class WepApiConfig    
ODataModelBuilder builder = new ODataConventionModelBuilder();
var conf = builder.EntitySet<User>("users");
conf.EntityType.Property(f => f.Username).Name = "user_name";
Run Code Online (Sandbox Code Playgroud)

查询

GET /api/users?$select=user_name
Run Code Online (Sandbox Code Playgroud)

现在应该可以工作(使用我的 OData 服务可以正常工作)

我的回答是基于对这个问题的回答,但有一些小的更正。