À partir du modèle pour l'API Web 2, une méthode de publication est toujours comme ceci:
[ResponseType(typeof(MyDTO))]
public IHttpActionResult PostmyObject(MyDTO myObject)
{
...
return CreatedAtRoute("DefaultApi", new { id = myObject.Id }, myObject);
}
Je ne comprends pas cette CreatedAtRoute()
méthode. Quelqu'un peut-il m'expliquer la CreatedAtRoute()
méthode?
Réponses:
La
CreatedAtRoute
méthode est destinée à renvoyer un URI à la ressource nouvellement créée lorsque vous appelez une méthode POST pour stocker un nouvel objet. Donc, si vous POSTEZ un article de commande par exemple, vous pouvez renvoyer une route comme 'api / order / 11' (11 étant évidemment l'identifiant de la commande).BTW, je suis d'accord que l'article MSDN n'est d'aucune utilité pour comprendre cela. L'itinéraire que vous retournez dépendra naturellement de la configuration de votre itinéraire.
la source
[Route("[controller]")]
du contrôleur, que dois-je retourner (pour que l'action GET adjacente puisse être appelée avec l'URL, par exemple)?Lorsque vous utilisez CreatedAtRoute, le premier argument est le nom de la méthode de Get to the resource. L'astuce qui n'est pas si évidente est que, même avec le nom de méthode correct spécifié, vous devez utiliser le paramètre Name sur l'attribut HttpGet pour que cela fonctionne.
Donc, si le retour dans votre message est le suivant:
Ensuite, votre attribut de méthode Get doit ressembler à ceci même si votre méthode est nommée Get:
Les appels à votre méthode Post renverront non seulement le nouvel objet (normalement au format JSON), mais également définir l'en-tête Location sur la réponse à l'URI qui obtiendrait cette ressource.
la source
Dans .net core WebAPI, vous utilisez cette méthode pour renvoyer un code 201, ce qui signifie que l'objet a été créé.
Comme vous pouvez le voir ci-dessus, le CreatedAtRoute peut recevoir 3 paramètres:
routeName Est le nom que vous devez mettre sur la méthode qui sera l'URI qui obtiendra cette ressource après sa création.
routeValues C'est l'objet contenant les valeurs qui seront passées à la méthode GET sur la route nommée. Il sera utilisé pour renvoyer l'objet créé
content C'est l'objet qui a été créé.
L'exemple ci-dessus montre l'implémentation de deux méthodes d'un contrôleur simple avec une méthode GET simple avec le nom lié et la méthode POST qui crée un nouvel objet.
IMPORTANT
Notez que le premier paramètre de CreatedAtRoute (routeName) doit être identique à la définition du Name dans la méthode Get.
L'objet sur le deuxième paramètre devra avoir les champs nécessaires que vous utilisez pour récupérer la ressource sur la méthode Get, vous pouvez dire que c'est un sous-ensemble de l'objet créé lui-même
Le dernier paramètre est l'objet société reçu dans la demande de corps dans sa forme complète.
FINALY
En tant que résultat final, lorsque la publication pour créer une nouvelle entreprise est envoyée à cette API, vous retournerez une route comme 'api / company / {id}' qui vous renverra la ressource nouvellement créée
la source