2016-10-05 34 views
1

我是新的使用web api,我試圖調用我的控制器中的特定方法。web api路由與行動和編號

Global.asax的

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

的WebApiConfig這些路線

// 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 
    } 
); 

和我的控制器類

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

我使用的URL是

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

,但我得到這個錯誤 路徑段不能包含連續的兩個參數。它們必須用'/'或文字串隔開。

我越來越螺母:-)使用

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

你也可以使用屬性映射任何URL

+0

什麼是URL的'mdmwapi'部分? – Mostafiz

+0

是項目名稱 – brillox

+0

你應該刪除這部分,並再次嘗試發生什麼,因爲它不是url的一部分 – Mostafiz

回答

3

使用屬性路由

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

,那麼你可以要求它的路由這樣

+0

好吧,我可以從我的WebApiConfig刪除路由嗎? – brillox

+1

保留默認設置並刪除其他人 – Mostafiz

0

該解決方案是一個新的路線和URL中的錯誤的組合

新的路線,如今是這些的

// 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"  
        } 
       ); 

,並在URL中的錯誤是,儘管控制器類的名字是MdmwPatientController我不得不省略「控制器」後綴從測試客戶端調用的時候,所以正確的URL是

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

+0

我要感謝Mostafiz,因爲他的建議讓我想出瞭解決方案,因此我接受他的回答 – brillox