Pergunta

Eu estou usando o atributo de roteamento para especificar minhas rotas em um controlador que herda do Sistema.Da Web.Http.ApiController.Eu estou ficando um pouco de funk comportamento.Veja um exemplo de código:

[RoutePrefix("api/1/user")]
public class UserRestController : ApiController
{
    UserService userService = new UserService();

    [Route("{id}"), HttpGet]
    public UserDTO Get(string id)
    {
        var user = userService.GetUserById(id);

        return user;
    }
}

Que funciona absolutamente como seria de esperar.Quando eu visitar o ~/api/1/user/someId eu recebo as informações esperadas de volta.Quando eu mudar para não incluir a '1' o prefixo da rota, recebo Nenhum recurso de HTTP verificou-se que corresponda ao pedido URI "baseUrl/api/user/someId'."

Eu tenho mvc rotas, web api rotas e atributo de todas as rotas de serem registradas no aplicativo inicie neste projecto, mas eu acho que as rotas padrão para este controlador seria ~/userrest/...então, eu não acho registrar esses seriam a causa disso, mas eu poderia estar errado.

Exemplo do que eu quero:

[RoutePrefix("api/user")]
public class UserRestController : ApiController
{
    UserService userService = new UserService();

    [Route("{id}"), HttpGet]
    public UserDTO Get(string id)
    {
        var user = userService.GetUserById(id);

        return user;
    }
}

Eu esperaria que ~/api/user/someId funcionaria no entanto recebo a mensagem de erro mencionada acima ("Não HTTP recurso foi encontrado que coincide com o URI do pedido 'baseUrl/api/user/someId'.").

Cheio de erro em xml:

<Error> 
    <Message> 
        No HTTP resource was found that matches the request URI     
        'baseUrl/api/user/someId';. 
    </Message> 
    <MessageDetail> 
        No type was found that matches the controller named 'user'. 
    </MessageDetail> 
</Error>
Foi útil?

Solução

Com base na sua descrição de erro, você parece ter registrado convencional rotas antes de chamar MapHttpAttributeRoutes.Por exemplo, você pode ter uma rota de como config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}"...).Neste caso, a solicitação, como api/user/someid gostaria de corresponder a esse percurso e a Web API poderia estar procurando por um controlador do tipo UserController.Certifique-se de chamar MapHttpAttributeRoutes antes desta rota convencional.

Regra básica:mais rotas específicas deve ser registrada antes do menos específicos ou genéricos rotas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top