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);
}
}
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);
}
}