Я пытаюсь предоставить вычисляемое свойство только для чтения через службу OData v4 с помощью веб-API.В моих поисках появляются только сообщения от 2014 года и старше, единственными решениями являются либо устаревший код, либо обещание, что вычисленные свойства будут поддерживаться в следующей версии OData (я уверен, что с тех пор было несколько «следующих версий»).).
Для моего примера я буду использовать класс Person
с комбинированным FullName
:
public class Person
{
public int ID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
// My calculated property.
public string FullName
{
get
{
return FirstName + " " + LastName;
}
}
}
Это мой WebAPIConfig
:
using System.Web.Http;
using System.Web.OData.Builder;
using System.Web.OData.Extensions;
using TestService.Models;
namespace TestService
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Person>("People");
config.MapODataServiceRoute("ODataRoute", null, builder.GetEdmModel());
}
}
}
В настоящее время JSON не отображает FullName
.Что нужно сделать, чтобы сделать это в текущей версии всего?
Редактировать: Добавление моего контроллера для моего Person
объекта:
using System.Web.Http;
using System.Web.OData;
using TestService.Models;
namespace TestService.Controllers
{
public class PeopleController : ODataController
{
DataContext db = new DataContext();
protected override void Dispose(bool disposing)
{
db.Dispose();
base.Dispose(disposing);
}
[EnableQuery]
public IQueryable<Person> Get()
{
return db.People;
}
[EnableQuery]
public SingleResult<Person> Get([FromODataUri] int key)
{
IQueryable<Person> result = db.People.Where(p => p.ID == key);
return SingleResult.Create(result);
}
}
}