如何在asp.net web api中处理查询字符串参数

时间:2012-07-18 20:10:13

标签: asp.net-mvc-routing asp.net-web-api

这是我如何设置路由。

 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参数?

3 个答案:

答案 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 }
);