2016-12-01 1 views
0

Ich habe ein Problem mit meinem OData V4-Dienst in ASP.NET bei der Verwendung von Integer-Schlüsseln. Ich verwende kein Entity Framework, da ich meine Daten von einem SOAP-Service bekomme.Warum funktioniert mein OData V4-Bezeichner nicht in meinem ASP.NET-Datendienst?

Hier ist meine Datenklasse:

public class RecipeDto 
{ 
    public RecipeDto(); 
    public RecipeDto(string name); 
    public RecipeDto(int ident); 

    public string Description { get; set; } 
    public int Ident { get; set; } 
    public string Name { get; set; } 
    public List<RecipeVersionDto> Versions { get; set; } 
} 

Und ich meine Schlüssel fließend API:

var rtdto = builder.EntitySet<RecipeTemplateDto>("AgentConfigTemplates").EntityType 
       .HasKey(r => r.Ident) 
       .HasMany(r => r.Versions); 

Hier ist meine Metadaten auf meinem Service:

<EntityType Name="RecipeTemplateDto"> 
<Key> 
<PropertyRef Name="Ident"/> 
</Key> 
<Property Name="Ident" Type="Edm.Int32" Nullable="false"/> 
<Property Name="Description" Type="Edm.String"/> 
<Property Name="Name" Type="Edm.String"/> 
<NavigationProperty Name="Versions" Type="Collection(Ifmdatalink.Linerecorder.Backend.PlugIn.dto.RecipeTemplateVersionDto)"/> 
</EntityType> 

I Now würde erwarten, den ersten Eintrag meines Entitätssatzes mit dieser Abfrage zu erhalten:

GET http://localhost:13917/my.svc/AgentConfigTemplates(1) 

Aber ich bekomme immer die vollständige Liste.

Warum passiert das und wie bekomme ich den ersten Eintrag?

Muss ich meinen odata Controller irgendwie erweitern?

Wenn ich meinen Schlüssel in Anführungszeichen setze bekomme ich eine schlechte Anfrage Antwort.

Antwort

0

Die Antwort ist weder im Modell noch in der fließenden API-Definition. Es ist ein Problem des Controllers. Ein OData-Controller benötigt zwei get-Methoden zu implementieren:

public async Task<IQueryable<AgentVersionDto>> Get() 

public SingleResult<AgentDto> Get([FromODataUri] int key) 

Dies ist ein für die ganze Einheit Set umfasst erhalten und für einen einzigen Eintrag. Wenn letzteres nicht implementiert ist, gibt der Odata-Dienst in webapi 2 immer die gesamte Liste zurück.