在WebAPI中定义两个get函数

当我试图在MVC WebAPI中调用GET函数时,我将遵循exception

{"$id":"1","Message":"An error has occurred.", "ExceptionMessage":"Multiple actions were found that match the request: \r\nSystem.Xml.XmlNode Get(Int32, System.String) 

我认为问题是因为两个get函数我定义了两个函数:

一:

  [HttpGet] public XmlNode Get(int id, string Tokken) { //Do something } 

第二个

  [HttpGet] public List GetUsersInteractions(int? activityID, string Tokken) { // Do Something } 

路线配置

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

现在我在尝试调用第二个函数时遇到exception:

 {SiteURL}/api/Activities/GetUsersInteractions?activityID=32&Tokken=r54e54353 

如您所见,路由引擎将请求发送到第一个函数而不是第二个函数。

如何定义两个get操作并分别调用每个操作?

使用默认路由模板,Web API使用HTTP方法选择操作。 但是,您也可以创建一个路径,其中操作名称包含在URI中:

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

在此路由模板中,{action}参数在控​​制器上命名操作方法。 使用此样式的路由,使用属性指定允许的HTTP方法。 例如,假设您的控制器具有以下方法:

 public class ProductsController : ApiController { [HttpGet] public string Details(int id); } 

在这种情况下,对“api / products / details / 1”的GET请求将映射到Details方法。 这种路由类型与ASP.NET MVC类似,可能适用于RPC样式的API。

您可以使用ActionName属性覆盖操作名称。 在以下示例中,有两个操作映射到“api / products / thumbnail / id。一个支持GET,另一个支持POST:

 public class ProductsController : ApiController { [HttpGet] [ActionName("Thumbnail")] public HttpResponseMessage GetThumbnailImage(int id); [HttpPost] [ActionName("Thumbnail")] public void AddThumbnailImage(int id); } 

您没有调用第二个函数 – 第二个函数名为InsertUserRecord ,是一个POST方法。 您通过GET调用的函数是GetUserInteractions 。 因为GET没有这样的function,所以引擎可以将它映射到唯一的GET函数,但实际上它应该抛出“没有这样的函数”错误。