【问题标题】:how to handle query string parameter in asp.net web api如何处理asp.net web api中的查询字符串参数
【发布时间】:2012-07-18 20:10:13
【问题描述】:
这是我的路由设置。
routes.MapHttpRoute(
name: "Authors",
routeTemplate: "api/authors",
defaults: new { controller = "authors" }
);
控制器动作方法
// GET /api/authors/
public string GetAuthors(string author_ids)
{
return data;
}
Url http://site.com/api/authors?author_ids=1 实际上调用了控制器动作,但是当我不传递查询字符串参数时,它说找不到控制器动作匹配。
定义路由时如何处理可选的查询字符串参数?
【问题讨论】:
标签:
asp.net-mvc-routing
asp.net-web-api
【解决方案1】:
// GET /api/authors/
public IEnumerable<string> GetAuthors()
{
return data;
}
您需要定义一个不带参数的操作。
不过,最好将 id 作为可选添加到您的路线中:
routes.MapHttpRoute(
name: "Authors",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
【解决方案2】:
您可以具体如下:
routes.MapHttpRoute(
name: "Authors",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
动作可以是:
// GET /api/authors/?XXXX
public IEnumerable<string> GetAuthors( [FromUri] String author_ids)
{
return data;
}
这只会匹配 查询字符串 。 [FromUri] 允许从查询字符串中获取参数。
【解决方案3】:
你可能会特别喜欢:
routes.MapHttpRoute(
name: "Authors",
routeTemplate: "api/{controller}/{author_ids}",
defaults: new { author_ids = RouteParameter.Optional }
);