Question

Je suis l'aide de l'attribut de routage pour spécifier mes itinéraires dans un contrôleur qui hérite de System.Web.Http.ApiController.Je suis certains funky comportement.Voici un exemple de code:

[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;
    }
}

Qui fonctionne absolument comment je m'attends.Lorsque je visite ~/api/1/utilisateur/someId-je obtenir de l'information attendue en arrière.Quand je switch de ne pas inclure le " 1 " dans le préfixe de l'itinéraire-je obtenir "Aucune ressource HTTP a été trouvée, qui correspond à l'URI de la demande "baseUrl/api/utilisateur/someId'."

J'ai mvc routes, l'api web de routes et d'attribut routes tous être enregistrés sur l'app début dans ce projet mais je pense que les routes par défaut pour ce contrôleur est ~/userrest/...donc je ne pense pas que l'enregistrement de ceux qui seraient la cause de cela, mais je peux me tromper.

Exemple de ce que je veux:

[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;
    }
}

Je m'attends que ~/api/utilisateur/someId serait de travailler mais j'ai l'erreur mentionnée ci-dessus ("Pas de HTTP ressource a été trouvée, qui correspond à l'URI de la demande "baseUrl/api/utilisateur/someId'.").

Plein d'erreur 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>
Était-ce utile?

La solution

Basé sur votre description de l'erreur, vous semblez avoir enregistré les voies traditionnelles avant d'appeler MapHttpAttributeRoutes.Par exemple, vous pourriez avoir une route comme config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}"...).Dans ce cas, la requête comme api/user/someid serait correspond à cette route et à l'API de Web serait à la recherche d'un contrôleur de type UserController.Assurez-vous d'appeler MapHttpAttributeRoutes avant de ce classique de l'itinéraire.

Règle de base:plus d'itinéraires spécifiques doivent être enregistrés avant les moins spécifiques ou génériques routes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top