WebApi 分页不起作用,即使我正确设置 url 参数,页面也始终为 0

WebApi Pagination not working, page is always 0 even when I set url parameter correctly

api控制器方法是这样的:

        public IHttpActionResult GettblEmpleados(int page, int pageSize)
        {
            var query = db.SPEmpleadosIntranet().ToList();

            var totalCount = query.Count();
            var totalPages = (int)Math.Ceiling((double)totalCount / pageSize);

            var urlHelper = new UrlHelper(Request);
            var prevLink = page > 0 ? urlHelper.Link("Empleados", new { page = page - 1, pageSize = pageSize }) : "";
            var nextLink = page < totalPages - 1 ? urlHelper.Link("Empleados", new { page = page + 1, pageSize = pageSize }) : "";

            var results = query
            .Skip(pageSize * page)
            .Take(pageSize)
            .ToList();

            return Ok(query);
        }

我用来消费服务的 url 是:

但是page一直为0,那么prevLink一直为空 http://localhost:12929/api/Empleados?page=0&pageSize=10

我得到的错误是这样的:(抱歉框架是西班牙语)

Translatio 说找不到路径 /Empleados

No se encuentra ninguna ruta con el nombre 'Empleados' en la colección de rutas.\r\nNombre del parámetro: name"

这是控制器

public class EmpleadosController : ApiController
{

这是 globa.asax

protected void Application_Start()
{
    GlobalConfiguration.Configuration.Formatters.Clear();
    GlobalConfiguration.Configuration.Formatters.Add(new JsonMediaTypeFormatter());
    AreaRegistration.RegisterAllAreas();
    GlobalConfiguration.Configure(WebApiConfig.Register);
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);

更新1

这是网站api配置

public static void Register(HttpConfiguration config) 
        { 
            // Web API configuration and services 
            // Web API routes 
            config.MapHttpAttributeRoutes(); 
            config.Routes.MapHttpRoute( 
                name: "DefaultApi", 
                routeTemplate: "api/{controller}/{id}", 
                defaults: new { id = RouteParameter.Optional } 
            ); 
        }

在您当前的 URL 中,您指的不是您的行为...

控制器/动作/参数

在您的 webapiconfig 中 -->

routeTemplate: "api/{controller}/{action}/{id}"

http://localhost:12929/api/Empleados/GettblEmpleados?page=0&pageSize=10

你需要告诉方法它匹配哪个Http方法。尝试使用以下属性装饰它:

[HttpGet]
public IHttpActionResult GettblEmpleados(int page, int pageSize)
{

由于您正在使用 config.MapHttpAttributeRoutes();,您可以使用 Route Prefixes as follows and because you are using the UrlHelper.Link Method you need to set the Route Name

[RoutePrefix("api/Empleados")]   
public class EmpleadosController : ApiController {

    [Route("", Name="Empleados")]
    [HttpGet]
    public IHttpActionResult GettblEmpleados(int page, int pageSize) {
        var query = db.SPEmpleadosIntranet().ToList();

        var totalCount = query.Count();
        var totalPages = (int)Math.Ceiling((double)totalCount / pageSize);

        var urlHelper = new UrlHelper(Request);
        var prevLink = page > 0 ? urlHelper.Link("Empleados", new { page = page - 1, pageSize = pageSize }) : "";
        var nextLink = page < totalPages - 1 ? urlHelper.Link("Empleados", new { page = page + 1, pageSize = pageSize }) : "";

        var results = query
        .Skip(pageSize * page)
        .Take(pageSize)
        .ToList();

        return Ok(query);
    }
}