在WebAPI中定义两个get函数
本文关键字:两个 get 函数 WebAPI 定义 | 更新日期: 2023-09-27 18:05:11
当我试图在MVC WebAPI中调用GET函数时,我将遇到以下异常
{"$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<UsersAnswers> GetUsersInteractions(int? activityID, string Tokken)
{
// Do Something
}
路由配置
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
现在当我尝试调用第二个函数时,我得到了异常:
{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
没有这样的函数,引擎可能会将其映射到唯一的GET
函数,但实际上它应该抛出"no such function"错误。