2012-11-14 15 views
5

Sto configurando un servizio di riposo utilizzando la nuova API Web .NET e ho riscontrato un piccolo problema. Vogliamo avere un percorso leggermente diverso, ma non sono sicuro di come farlo.Livelli di URL multipli in API Web .NET

public class FormController : ApiController 
{ 

    // api/form 
    public string Get() 
    { 
     return "OK-Get"; 
    } 
    // api/form/method1 
    public string Method1() 
    { 
     return "OK1"; 
    } 
    // api/form/method2 
    public string Method2() 
    { 
     return "OK2"; 
    } 
} 

Ma questo non funziona. Se vado a /api/form/method2, ricevo OK-Get come risposta.

Sto pensando che questo abbia a che fare con il routing, ma non ne sono sicuro, dal momento che non ho usato MVC prima. Ho provato la sua creazione come questo nel WebApiConfig.cs:

config.Routes.MapHttpRoute(
    name: "FormApi", 
    routeTemplate: "api/form/{action}" 
); 

Ma questo non ha fatto nulla.

risposta

3

Il routing è quasi corretto, ma il problema principale è che mancano gli attributi HttpMethod richiesti negli altri metodi di azione. [HttpGet] viene dedotto sul primo metodo a causa del suo nome. Questo è quello che vi serve:

public class FormController : ApiController 
{ 
    // api/form 
    public string Get() 
    { 
     return "OK-Get"; 
    } 

    // api/form/method1 
    [HttpGet] 
    public string Method1() 
    { 
     return "OK1"; 
    } 

    // api/form/method2 
    [HttpGet] 
    public string Method2() 
    { 
     return "OK2"; 
    } 
} 

Con una mappa del percorso che appartiene a App_Start/RouteConfig.cs

routes.MapHttpRoute(
    name: "FormApi", 
    routeTemplate: "api/form/{action}", 
    defaults: new { controller = "form", action = "Get"} 
); 

Per ulteriori informazioni leggere http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-and-action-selection

+0

che ha funzionato! Grazie. Solo una nota, la configurazione del percorso deve essere in 'WebApiConfig.cs' perché diventi effettiva. – peirix

Problemi correlati