我可以将多个变量传递给[HttpGet]
ApiController 操作吗?例如:
[HttpGet]
public IPagedList<Something> GetAll(int? page, string sortOrder="")
{
...
}
我测试使用
curl http://localhost:[port]/api/[controller]/GetAll?page=3&sortOrder=Name
但该行动从未被调用。返回消息是:未找到与请求 URI 匹配的 HTTP 资源。什么地方出了错?
- -更新 - -
如果我检查 HttpActionContext.Request.RequestUri.Query 中的查询字符串,则AbsoluteUri
在 & 符号处截断并只给我page=3
.
---更新结束
我还尝试了一个变量:
[HttpGet]
public IPagedList<Something> GetAll(int? page)
{
...
}
在测试中可以毫无问题地到达里面的断点
curl http://localhost:[端口]/api/[控制器]/GetAll?page=3
我还创建了一个视图模型:
public class ListRequestModel
{
public string SortOrder { get; set; }
public string CurrentFilter { get; set; }
public string SearchString { get; set; }
public int PageNumber { get; set; }
}
动作就像:
[HttpGet]
public IPagedList<Something> GetAll(ListRequestModel model)
{
...
}
然后测试
curl http://localhost:[端口]/api/[控制器]/GetAll?PageNumber=3&SortOrder=Name
这一次,可以达到里面的断点,这是一件了不起的事情。但模型为空,未填充查询字符串中的数据。
那么,将多个变量传递给动作方法的正确方法是什么?请帮忙。谢谢你。
- - - - - 更新 - - - - - -
根据要求,下面粘贴的是文件中的路由表RouteConfig.cs
:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
在Global.asax.cs
,AreaRegistration.RegisterAllAreas();
之前RouteConfig.RegisterRoutes(RouteTable.Routes);
但没有 Area 路线以 . 开头api
。我对此 ApiController 的所有其他测试都可以毫无问题地进入操作。