2016-10-05 36 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