簡體   English   中英

帶有動作和 id 的 web api 路由

[英]web api routing with action and id

我是使用 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);
}

我使用的網址是

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

但我收到此錯誤路徑段不能包含兩個連續的參數。 它們必須用“/”或文字字符串分隔。

我快瘋了:-)

使用屬性路由

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

然后你可以使用它來請求它

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

您也可以通過這種方式使用屬性路由映射任何 url

解決方案是新路由和 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM