2016-10-05 4 views
1

Je suis nouveau dans l'utilisation de l'API Web et j'essaie d'appeler une méthode spécifique dans mon contrôleur.web api routage avec action et id

Je

global.asax

protected void Application_Start() 
{ 
    GlobalConfiguration.Configure(WebApiConfig.Register); 
} 

la classe WebApiConfig avec ces acheminements

// Web API routes 
config.MapHttpAttributeRoutes(); 


config.Routes.MapHttpRoute(
     name: "ActionApi", 
     routeTemplate: "api/{controller}/{action}/{id}", 
     defaults: new 
     { 
      id = RouteParameter.Optional 
     } 
); 



config.Routes.MapHttpRoute(
    name: "DefaultApi", 
    routeTemplate: "api/{controller}/{id}", 
    defaults: new 
    { 
     action="DefaultAction", 
     id = RouteParameter.Optional 
    } 
); 

et mon contrôleur

[HttpGet] 
public HttpResponseMessage GetPatSummary(string PatId) 
{ 
    PatientSummary Pat = new PatientSummary(); 

    HttpResponseMessage Response = new HttpResponseMessage(); 
    string yourJson = Pat.GetPatient(PatId); 
    Response = this.Request.CreateResponse(HttpStatusCode.OK, yourJson); 
    return Response; 
} 

[ActionName("DefaultAction")] //Map Action and you can name your method with any text 
public IHttpActionResult GetPatient(int id) 
{ 
    Object Obj = new object(); 

    if (Obj!=null) 
    { 
     return NotFound(); 
    } 
    return Ok(Obj); 
} 

l'URL J'utilise est

http://localhost/mdmwapi/api/MdmwPatientController/GetPatSummary/sgdgdgddhdhd1334254

mais je reçois cette erreur Un segment de chemin ne peut pas contenir deux paramètres consécutifs. Ils doivent être séparés par un '/' ou par une chaîne littérale.

Je reçois écrou :-)

+0

ce qui est 'partie mdmwapi' d'URL? – Mostafiz

+0

est le nom du projet – brillox

+0

vous devez supprimer cette partie et essayer à nouveau ce qui se passe, car ce n'est pas la partie de l'url – Mostafiz

Répondre

3

Utiliser l'attribut de routage

[HttpGet] 
[Route("api/MdmwPatientController/GetPatSummary/{PatId}")] 
public HttpResponseMessage GetPatSummary(string PatId) 
{ 
    PatientSummary Pat = new PatientSummary(); 

    HttpResponseMessage Response = new HttpResponseMessage(); 
    string yourJson = Pat.GetPatient(PatId); 
    Response = this.Request.CreateResponse(HttpStatusCode.OK, yourJson); 
    return Response; 
} 

alors vous pouvez demander l'aide

http://localhost/api/MdmwPatientController/GetPatSummary/yourpatid 

vous pouvez également mapper une URL en utilisant l'attribut de routage de cette façon

+0

Ok, puis-je supprimer le routage de mon WebApiConfig? – brillox

+1

garder les valeurs par défaut et enlever les autres – Mostafiz

0

la solution est une combinaison d'une nouvelle route et une erreur dans l'URL

les nouvelles routes sont maintenant celles-ci

// Web API routes 
      config.MapHttpAttributeRoutes(); 

      config.Routes.MapHttpRoute 
     (
     name: "DefaultApi", 
     routeTemplate: "api/{controller}/{id}", 
     defaults: new 
     { 
      id = RouteParameter.Optional 
     } 
     ); 


      config.Routes.MapHttpRoute(
       name: "ApiMethodCall", 
       routeTemplate: "api/{controller}/{action}/{PatId}", 
       defaults: new 
       { 
        controller= "MdmwPatient", 
        action= "GetPatSummary"  
        } 
       ); 

et l'erreur dans l'URL est que même si le nom de la classe du contrôleur est MdmwPatientController je dois omettre le suffixe « contrôleur » lors de l'appel du client de test, donc l'URL correcte est

http://localhost/mdmwapi/api/MdmwPatient/GetPatSummary/sgdgdgddhdhd1334254

+0

Je tiens à remercier Mostafiz parce que ses suggestions m'ont conduit à comprendre ma solution et pour cette raison j'accepte sa réponse – brillox