2017-08-31 1 views
0

Je travaille avec un WebAPI ASP.NET avec Entity Framework et contrôleur odataV4OData contrôleur ne fonctionne pas avec plusieurs clés

d'abord, j'avais une balise [Key] dans mon modèle et chaque controllerAction a été montré dans l'interface utilisateur de fanfaronnades

maintenant, j'ai 3 [clés] tags dans mon modèle et que controllerActions sans arguments sont présentés dans l'interface utilisateur de fanfaronnades

J'ai changé mon modèle de

//Some other stuff 
    [Key] 
    public byte first{ get; set; } 
    public int second{ get; set; } 
    public long third{ get; set; } 
    //Some other stuff 

à

 //Some other stuff 
    [Key] 
    public byte first{ get; set; } 
    [Key] 
    public int second{ get; set; } 
    [Key] 
    public long third{ get; set; } 
    //Some other stuff 

et la controllerAction de

public async Task<IHttpActionResult> Put([FromODataUri] byte key, Delta<lists> patch)

à

public async Task<IHttpActionResult> Put([FromODataUri] byte first, [FromODataUri] int second, [FromODataUri] long third, Delta<lists> patch)

avec une touche les points de terminaison sont indiquées dans l'interface utilisateur de fanfaronnades et ils travaillent, avec plusieurs clés les points de terminaison ne sont pas affichés dans l'interface utilisateur swagger et chaque fois que j'essaie d'atteindre le point de terminaison cette erreur sh ows up

"Aucune action n'a été trouvée sur les 'listes' du contrôleur correspondant à la requête."

J'envoyer un PUT demande avec .../myController(first=1,second=1,third=10) dans l'URL

Ce que je suis absent ou faire du tort?

+0

Ce que @SamXu a dit et il est également sensible à la casse, je pense –

Répondre

2

Quelle version utilisez-vous? Comme je le sais, les dernières versions 5.x et 6.x prennent en charge les multiples clés, quel que soit le routage des attributs ou le routage des conventions que vous utilisez.

Voir les commentaires dans https://github.com/OData/WebApi/blob/maintenance-V4/src/System.Web.OData/OData/Routing/Conventions/ProcedureRoutingConventionHelpers.cs#L133-L137

Donc, pour votre scénario, si le routage des congrès, le nom du paramètre dans la méthode de commande doit être préfixé par « clé ».

public async Task<IHttpActionResult> Put([FromODataUri] byte keyfirst, [FromODataUri] int keysecond, [FromODataUri] long keythird, Delta<lists> patch) 

Espérons que cela puisse vous aider. Merci!