这是我如何设置路由。
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实际上调用了控制器操作,但是当我没有传递querystring参数时,它表示找不到控制器操作匹配。
定义路由时如何处理可选的querystring参数?
答案 0 :(得分:0)
// GET /api/authors/
public IEnumerable<string> GetAuthors()
{
return data;
}
您需要定义一个不带参数的动作。
然而,最好将ID添加到您的路线中作为可选项:
routes.MapHttpRoute(
name: "Authors",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
答案 1 :(得分:0)
您可以具体如下:
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] 允许从查询字符串中获取参数。
答案 2 :(得分:0)
您可能具体如:
routes.MapHttpRoute(
name: "Authors",
routeTemplate: "api/{controller}/{author_ids}",
defaults: new { author_ids = RouteParameter.Optional }
);