No modelo da API da Web 2, um método de postagem é sempre assim:
[ResponseType(typeof(MyDTO))]
public IHttpActionResult PostmyObject(MyDTO myObject)
{
...
return CreatedAtRoute("DefaultApi", new { id = myObject.Id }, myObject);
}
Eu não entendo esse CreatedAtRoute()
método Alguém pode me explicar o CreatedAtRoute()
método?
Respostas:
O
CreatedAtRoute
método pretende retornar um URI ao recurso recém-criado quando você invoca um método POST para armazenar algum novo objeto. Portanto, se você POSTAR um item do pedido, por exemplo, poderá retornar uma rota como 'api / order / 11' (11 é obviamente o ID do pedido).BTW Concordo que o artigo do MSDN não serve para entender isso. A rota que você realmente retorna dependerá naturalmente da sua configuração de roteamento.
fonte
[Route("[controller]")]
no controlador, o que eu retornarei (para que a ação GET adjacente possa ser chamada com a URL, por exemplo)?Quando você usa CreatedAtRoute, o primeiro argumento é o nome do método Get ao recurso. O truque que não é tão óbvio é que, mesmo com o nome do método correto especificado, você deve usar o parâmetro Name no atributo HttpGet para que ele funcione.
Portanto, se o retorno no seu Post for este:
Em seguida, o atributo do método Get deve ficar assim, mesmo que o método seja chamado Get:
As chamadas para o método Post não apenas retornarão o novo objeto (normalmente como JSON), mas também definirão o cabeçalho Location na resposta ao URI que obteria esse recurso.
fonte
Na WebAPI principal .net, você usa esse método para retornar um código 201, o que significa que o objeto foi criado.
Como você pode ver acima, o CreatedAtRoute pode receber 3 parâmetros:
routeName É o nome que você deve colocar no método que será o URI que obteria esse recurso após a criação.
routeValues É o objeto que contém os valores que serão passados para o método GET na rota nomeada. Será usado para retornar o objeto criado
conteúdo É o objeto que foi criado.
O exemplo acima mostra a implementação de dois métodos de um controlador simples com um método GET simples com o nome vinculado e o método POST que cria um novo objeto.
IMPORTANTE
Observe que o primeiro parâmetro em CreatedAtRoute (routeName) deve ser o mesmo na definição do Name no método Get.
O objeto no segundo parâmetro precisará ter os campos necessários que você usa para recuperar o recurso no método Get, você pode dizer que é um subconjunto do objeto criado por si mesmo
O último parâmetro é o objeto da empresa recebido na solicitação do corpo em seu formato completo.
FINALMENTE
Como resultado final, quando a postagem para criar uma nova empresa for criada para essa API, você retornará uma rota como 'api / company / {id}' que retornará para você o recurso recém-criado
fonte