Я в процессе преобразования веб-службы для использования OData. Я создал реализацию ODataController, как показано ниже:OData 4 AspNet: GET по параметру не работает
public class PersonController : ODataController
{
public PersonController()
{
}
public IHttpActionResult Get()
{
return Ok(new Person());
}
public IHttpActionResult Get([FromODataUri] int key)
{
return Ok(new Person());
}
protected override void Dispose(bool disposing)
{
}
}
И зарегистрировал модель, как так:
var builder = new ODataConventionModelBuilder();
builder.EntitySet<Person>("Person");
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.MapODataServiceRoute(
routeName: "odata",
routePrefix: "odata",
model: builder.GetEdmModel());
Веб-приложение развертывается без проблем, а первая функция работает, когда я звоню:
http://localhost:9200/odata/Customer
->
{
"@odata.context":"http://localhost:9200/odata/$metadata#Person/$entity","Name":"John"
}
Однако при вызове http://localhost:9200/odata/Customer(1) трассировка в журнале сервера показывает, что маршрут не найден:
iisexpress.exe Information: 0 : Response, Status=404 (NotFound), Method=GET, Url=http://localhost:9200/odata/Person(1), Message='Content-type='application/xml; charset=utf-8', content-length=unknown'
Я пробовал различные перестановки атрибутов с помощью ODataRoutePrefix, ODataRoute, EnableQuery по методу, и до сих пор ничего я не кажется, что помогает. Учебники, которые я видел, говорят, что это должно сработать, так что теперь я застрял в недоумении, как я должен работать. У кого-нибудь есть идеи?