我可以将多个变量传递给一个[HttpGet]
ApiController操作吗?例如: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)
{
...
}
内的破发点,可以毫无问题地在测试达到
卷曲的http://本地主机: [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)
{
...
}
然后测试
卷曲的http://本地主机:[端口]/API/[控制器]/GETALL的PageNumber = 3 & SortOrder的=命名
这一次,里面的折点可以达到,这是一件好事。但该模型为空,不会填充查询字符串中的数据。
那么,将多个变量传递给动作方法的正确方法是什么?请帮忙。谢谢。
---------- -----------更新
正如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的所有其他测试都可以毫无问题地进入操作。
什么在您的全局。 ASAX? – Liam
RegisterAllAreas,RegisterRoutes,Configure和RegisterGlobalFilters。 你怀疑我们的路由表吗? – Blaise
@Blaise是的,请张贴你的路由表。 – nemesv