C# 带有操作和id的web api路由

C# 带有操作和id的web api路由,c#,asp.net-web-api,C#,Asp.net Web Api,我对使用web api是新手,我正在尝试在我的控制器中调用一个特定的方法 我有 global.asax protected void Application_Start() { GlobalConfiguration.Configure(WebApiConfig.Register); } 包含这些路由的WebApiConfig类 // Web API routes config.MapHttpAttributeRoutes(); config.Routes.MapHttpRo

我对使用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是

但是我得到了这个错误 路径段不能包含两个连续的参数。它们必须用“/”或文字字符串分隔

我得到了坚果:-)

使用属性路由

[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,方法如下

使用属性路由

[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,但在从测试客户端调用时,我必须省略“controller”后缀,因此正确的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,但在从测试客户端调用时,我必须省略“controller”后缀,因此正确的URL是


什么是url的
mdmwapi
部分?是项目名称您应该删除此部分,然后重试发生了什么,因为它不是urlI did的一部分,ai收到404错误,因为IIS中的url注册为,所以我可以尝试重新创建虚拟目录,以便将虚拟目录重新创建为localhost/api,这样完整的url现在为,但我收到相同的错误附加信息:路径段不能包含两个连续的参数。它们必须用“/”或文字字符串分隔。url的
mdmwapi
部分是什么?是项目名称您应该删除此部分,然后重试发生了什么情况,因为它不是urlI did的一部分,ai收到404错误,因为IIS中的url注册为,所以我可以尝试重新创建虚拟目录,以便将虚拟目录重新创建为localhost/api,这样完整的url现在为,但我收到相同的错误附加信息:路径段不能包含两个连续的参数。它们必须用“/”或文字字符串分隔。好的,那么我可以从我的WebApiConfig中删除路由吗?保留默认值并删除其他设置吗?我可以从我的WebApiConfig中删除路由吗?保留默认值并删除其他设置我要感谢Mostafiz,因为他的建议让我找到了解决方案,因此我接受了他的建议答:我要感谢莫斯塔菲兹,因为他的建议让我找到了我的解决方案,因此我接受了他的回答