我正在使用WebApiConfig(MVC 4)中的默认路由设置,但出于某种原因我得到了意想不到的结果。
如果我致电/api/devices/get/
,它会点击Get
功能,但Id
是“get”而不是1
。如果我打电话给/api/devices/get/1
我得到404.我也希望能够支持多个参数,即
public Device[] Get(int? page, int? pageSize) // for multiple devices
路线
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional });
}
我的API:
public class DevicesController : ApiController
{
EClient client = new EClient();
// GET api/devices/5
public Device Get(string id)
{
return client.GetDeviceBySerial(id);
}
}
答案 0 :(得分:0)
控制器参数中的id应为整数:
public Device Get(int id)
{
return client.GetDeviceBySerial(id);
}
如果您需要传入字符串或其他婴儿车,请使用问题字符串:
public Device Get(int id, string pageSize)
{
return client.GetDeviceBySerial(id);
}
以上可以称为:
/ API /装置/ 1
或
/ API /装置/ ID = 1&安培;?的pageSize = 10
注意:您无需指定方法名称。 Web API将根据使用的HTTP Verb来判断。如果是GET请求,它将使用Get方法,如果是POST请求,那么它将使用Post方法......等等。
您可以更改上述行为,但我猜您提到您要保留默认路由...所以我不会覆盖它。