【发布时间】:2012-08-29 13:17:07
【问题描述】:
我可以将多个变量传递给[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:[port]/api/[controller]/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:[port]/api/[controller]/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); 之前,但没有区域路线以api 开头。我在这个 ApiController 上的所有其他测试都可以毫无问题地进入操作。
【问题讨论】:
-
RegisterAllAreas、RegisterRoutes、Configure 和 RegisterGlobalFilters。你怀疑我们的路由表吗?
-
@Blaise 是的,请发布您的路由表。
标签: asp.net-mvc curl asp.net-web-api