C# 组合路由参数和Uri参数

C# 组合路由参数和Uri参数,c#,asp.net-web-api,asp.net-web-api-routing,C#,Asp.net Web Api,Asp.net Web Api Routing,我正在尝试组合路由参数和uri参数。我试过了 config.Routes.MapHttpRoute( name: "CqsAPi", routeTemplate: "api/{controller}/{type}/{id}", defaults: new { id = RouteParameter.Optional } ); 和控制器 public class CqsController : ApiController { public object Get(s

我正在尝试组合路由参数和uri参数。我试过了

config.Routes.MapHttpRoute(
    name: "CqsAPi",
    routeTemplate: "api/{controller}/{type}/{id}",
    defaults: new { id = RouteParameter.Optional }
);
和控制器

public class CqsController : ApiController
{
    public object Get(string type, [FromUri] Data data)
    {
        var dto = var ParseDto<Query>(type, data);
        return _invoke.Query(dto);
    }
}
这很有效

config.Routes.MapHttpRoute(
    name: "CqsAPi",
    routeTemplate: "api/{controller}/{type}/{data}",
    defaults: new { type = RouteParameter.Optional, data = RouteParameter.Optional }
);
真倒霉,没用,这就是我想做的

网址 /api/cqs/FooQuery/?id=1

操作方法现在看起来像这样

public object Get(string type, [FromUri] JObject data)
{
    var t = typeof(Query).Assembly.GetType(type);
    var query = data.ToObject(t) as Query;

    return _invoker.Invoke(query);
}
食品查询

public class FooQuery : Query<IEnumerable<Foo>>
{
    public int Id { get; set; }
}

现在的问题是没有设置Id

为什么不向路由添加数据并删除Id,因为没有使用该Id?请提供请求的url和数据类定义?这就完成了技巧默认设置:新建{type=RouteParameter.Optional,data=RouteParameter.Optional}实际上数据是JObject类型的
public class FooQuery : Query<IEnumerable<Foo>>
{
    public int Id { get; set; }
}