Web Api路由问题

时间:2014-03-26 14:13:40

标签: c# asp.net-mvc asp.net-web-api asp.net-mvc-routing

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

1 个答案:

答案 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方法......等等。

您可以更改上述行为,但我猜您提到您要保留默认路由...所以我不会覆盖它。