Domanda

Sto usando il routing degli attributi per specificare i miei percorsi in un controller che eredita da sistema.web.http.apicontroller. Sto ricevendo un comportamento funky. Ecco alcuni campioni:

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

funziona assolutamente come mi aspetterei. Quando visito ~ / API / 1 / Utente / Someid ottengo indietro le informazioni previste. Quando passerò per non includere il '1' nel prefisso del percorso ottenuto "Nessuna risorsa HTTP è stata trovata che corrisponde alla richiesta URI 'Baseurl / API / Utente / Someid'."

Ho rotte MVC, rotte API Web e percorsi di attributo sono tutti registrati su APP START in questo progetto, ma penserei che i percorsi predefiniti per questo controller sarebbero ~ / USERREST / ... quindi non penserei di registrarti Quelle sarebbero la causa di questo, ma potrei sbagliare.

Campione di ciò che voglio:

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

Aspetterei che ~ / API / Utente / Someid funzionino tuttavia, ottengo l'errore sopra menzionato ("Non è stata trovata alcuna risorsa HTTP che corrisponde all'URIS BASEURL / API / USER / Someid '."). < / P >.

Errore completo 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>
.

È stato utile?

Soluzione

In base alla descrizione dell'errore, sembra che tu abbia registrato percorsi convenzionali registrati prima di chiamare MaftatTtatTratTratTratTtatTtatTPATTtribAd esempio, potresti avere un percorso come config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}"...).In questo caso la richiesta come api/user/someid corrisponderebbe a questa rotta e l'API Web sarebbe cerca un controller di tipo UserController.Assicurati di chiamare MapHttpAttributeRoutes prima di questo percorso convenzionale.

regola di base : i percorsi più specifici devono essere registrati prima dei percorsi meno specifici o generici.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top