0

这是我如何进行路由设置。

 routes.MapHttpRoute(
                        name: "Authors",
                        routeTemplate: "api/authors",
                        defaults: new { controller = "authors" }
                    );

控制器动作方法

// GET /api/authors/
    public string GetAuthors(string author_ids)
    {
        return data;
    }

网址http://site.com/api/authors?author_ids=1实际上调用了控制器动作,但是当我不传递查询字符串参数时,它说找不到控制器动作匹配。

定义路由时如何处理可选的查询字符串参数?

4

3 回答 3

0

您可以具体如下:

routes.MapHttpRoute(
    name: "Authors",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

和 Action 可以是:

// GET /api/authors/?XXXX
public IEnumerable<string> GetAuthors( [FromUri] String author_ids)
{
    return data;
}

这将只匹配查询字符串[FromUri]允许从查询字符串中获取参数。

于 2014-09-02T10:43:42.787 回答
0
// GET /api/authors/
    public IEnumerable<string> GetAuthors()
    {
        return data;
    }

您将需要定义一个不带参数的操作。

但是,最好将 id 作为可选添加到您的路由中:

routes.MapHttpRoute(
                        name: "Authors",
                        routeTemplate: "api/{controller}/{id}",
                        defaults: new { id = RouteParameter.Optional }
                    );
于 2012-07-18T20:20:06.287 回答
0

您可能会特别喜欢:

routes.MapHttpRoute(
    name: "Authors",
    routeTemplate: "api/{controller}/{author_ids}",
    defaults: new { author_ids = RouteParameter.Optional }
);
于 2014-09-02T10:59:29.553 回答