Одата может столкнуться с ошибками при использовании $select
из. net core 3.x с использованием System.Text.Json
сериализатора. Так что в вашем сценарии вы можете использовать AddNewtonsoftJson
в качестве обходного пути. Примечание. Если метод AddNewtonsoftJson
недоступен, убедитесь, что установлен пакет Microsoft.AspNetCore.Mvc.NewtonsoftJson
. Ниже приведен пример кода:
Student.cs:
public class Student
{
public Guid Id { get; set; }
public string Name { get; set; }
public int Score { get; set; }
}
StudentsController.cs:
[Route("api/[controller]")]
[ApiController]
public class StudentsController : ControllerBase
{
[HttpGet]
[EnableQuery()]
public IEnumerable<Student> Get()
{
return new List<Student>
{
CreateNewStudent("Cody Allen", 130),
CreateNewStudent("Todd Ostermeier", 160),
CreateNewStudent("Viral Pandya", 140)
};
}
private static Student CreateNewStudent(string name, int score)
{
return new Student
{
Id = Guid.NewGuid(),
Name = name,
Score = score
};
}
}
ConfigureServices:
services.AddControllers(mvcOptions =>
mvcOptions.EnableEndpointRouting = false)
.AddNewtonsoftJson();
services.AddOData();
services.AddODataQueryFilter();
Настроить:
app.UseMvc(b =>
{
b.Select().Filter();
b.MapODataServiceRoute("odata", "odata", GetEdmModel());
b.EnableDependencyInjection(); //add this line
});
GetEdmModel:
IEdmModel GetEdmModel()
{
var odataBuilder = new ODataConventionModelBuilder();
odataBuilder.EntitySet<Student>("Students");
return odataBuilder.GetEdmModel();
}
Так что https://localhost:44334/odata/students?$select=name
и https://localhost:44334/api/students?$select=name
вернут данные.