具有已知和动态参数的WebAPI路由

时间:2016-12-04 12:23:02

标签: asp.net-web-api dynamic get routing

我正在尝试在WebAPI(C#)中构建一个get动作,它将响应以下内容:

http://{host}/api/Callback/CompleteFlow/{MyId}/{dynamic parameters I have no control on}

例如:http://{host}/api/Callback/CompleteFlow/7?param1=abc&param2=def

还有:http://{host}/api/Callback/CompleteFlow/7

我创建了一个带有以下签名的动作:

[HttpGet]
public HttpResponseMessage CompleteFlow(int MyId, string requestParams)
{
}

并添加了特定的路由:

config.Routes.MapHttpRoute(
                name: "Callback",
                routeTemplate: "api/Callback/CompleteFlow/{MyId}/{*requestParams}",
                defaults: new { controller = "Callback", action = "CompleteFlow", requestParams = RouteParameter.Optional });

我在动作中的请求参数中得到MyId参数而不是动态参数(我希望得到requestParams = param1 = abc& param2 = def,但是得到null)。

我在这里缺少什么?

谢谢, 尼尔。

1 个答案:

答案 0 :(得分:3)

使用以下方法管理以解决此问题:

[HttpGet]
public HttpResponseMessage CompleteFlow(int MyId)
{
    var queryString = this.Request.GetQueryNameValuePairs();
}

config.Routes.MapHttpRoute(
                name: "Callback",
                routeTemplate: "api/Callback/CompleteFlow/{MyId},
                defaults: new { controller = "Callback", action = "CompleteFlow" });

希望它有助于某人:)

谢谢, 尼尔。