Le chemin d'accès d'un modèle de l'action dans le contrôleur n'est pas valide OData chemin modèle
J'obtiens l'erreur suivante:
Le chemin d'accès du modèle 'GetClients()' sur l'action "GetClients' controller 'Clients' n'est pas valide OData chemin de modèle. Ressource introuvable pour le segment 'GetClients'.
Mon contrôleur méthode ressemble à ce
public class ClientsController : ODataController
{
[HttpGet]
[ODataRoute("GetClients(Id={Id})")]
public IHttpActionResult GetClients([FromODataUri] int Id)
{
return Ok(_clientsRepository.GetClients(Id));
}
}
Mon WebAPIConfig fichier a
builder.EntityType<ClientModel>().Collection
.Function("GetClients")
.Returns<IQueryable<ClientModel>>()
.Parameter<int>("Id");
config.MapODataServiceRoute(
routeName: "ODataRoute",
routePrefix: "odata",
model: builder.GetEdmModel());
J'espère être en mesure d'appeler le odata api rest comme ceci:
http://localhost/odata/GetClients(Id=5)
Une idée de ce que je fais de mal?
Erreur similaire ici - stackoverflow.com/questions/27824774/...
OriginalL'auteur Nate | 2014-07-07
Vous devez vous connecter pour publier un commentaire.
Vous n'avez même pas besoin d'ajouter une fonction permettant d'obtenir une entité.
est tout ce dont vous avez besoin.
Et puis rédigez votre action comme:
Ou
C'est ce qui a fonctionné. Le ci-dessus ne fonctionne pas:
Alors la requête Get
ou
fonctionne.
Mise à jour: Utilisation indépendante de la fonction de retour de nombreux ClientModels.
Le code ci-dessous est pour v4. Pour la v3, vous pouvez utiliser l'action.
Ajouter une méthode dans le contrôleur comme:
Envoyer une requête du type:
Je suis à l'aide de Odata v3 parce que je suis en utilisant jaydata qui utilise Odata et ils ne semblent pas fonctionner avec v4. Comment fonctionne le routage de travail avec la v3?
Je l'ai changé pour utiliser la v4 et j'ai suivi vos instruction mais maintenant, je n'ai pas de retour d'information. localhost/odata/$metatdata fonctionne, mais localhost/odata/Clients(5 ne retourne rien
Fait le changement. vous ne recevez toujours Pas HTTP ressource a été trouvée, qui correspond à l'URI de la demande " localhost/odata/Clients(5)
La différence des deux méthodes est que le nom. Le "GetClientModel(int key)" sera assortie d'abord, puis sur "Get(int key)" sera mis en correspondance. Comme vous l'avez dit, ce dernier fonctionne, mais la précédente n'est pas, la raison en est que le nom du type d'entité n'est pas égal à "ClientModel"? Deux méthodes à la fois travailler sur mon ordinateur.
OriginalL'auteur Feng Zhao
Cette route est incorrect:
[ODataRoute("GetClients(Id={Id})")]
Il devrait être:
[ODataRoute("Clients({Id})")]
URL doit être:
http://localhost/odata/Clients(Id=5)
Oui, pouvez-vous me montrer comment obtenir le retour des clients modèles? Merci
Vérifier mes mises à jour de réponse.
OriginalL'auteur Nate