C# 如何将字典参数传递给web api方法?

C# 如何将字典参数传递给web api方法?,c#,asp.net,asp.net-web-api,C#,Asp.net,Asp.net Web Api,我在这里读过所有类似的问题,但我想不出解决办法。我正在尝试调用web api方法: [HttpGet] public SearchViewModel Get(SearchTypes type, string text, [FromUri]Dictionary<string, string> toyParams) { //Code here } [HttpGet] publicsearchViewModelget(SearchTypes类型,字符串文本,[FromUri]字典

我在这里读过所有类似的问题,但我想不出解决办法。我正在尝试调用web api方法:

[HttpGet]
public SearchViewModel Get(SearchTypes type, string text, [FromUri]Dictionary<string, string> toyParams)
{
    //Code here
}
[HttpGet]
publicsearchViewModelget(SearchTypes类型,字符串文本,[FromUri]字典到yparams)
{
//代码在这里
}
我想从uri中获取最后一个参数。我试过了


但是toyParams
字典总是空的。

一种简单的方法,而不是字典:

    //DTO
    public class SearchDTO
    {
        public int MyProperty1 { get; set; }
        public int MyProperty2 { get; set; }
        public int MyProperty3 { get; set; }
    }
其中,
MyProperty1
MyProperty2
MyProperty3
是必须根据其进行搜索的参数

        //GET Method
        public string Get([FromUri]SearchDTO searchDTO)
        {
            return "search result";
        }
以下是调用URL:


虽然已经很晚了,但是可以使用以下方法以名称/值对的形式返回查询参数- this.Url.Request.GetQueryNameValuePairs()

我有以下网址-

以下是我用WebAPI2编写的方法-

[HttpPost]
public IHttpActionResult SaveDataFromRestToDB(string dataKey) {
     var parameters = this.Url.Request.GetQueryNameValuePairs();
     //parameters returns KeyValuePair<string, string>[2], containing values passed in Url Query
}
[HttpPost]
公共IHttpActionResult SaveDataFromRestToDB(字符串数据键){
var parameters=this.Url.Request.GetQueryNameValuePairs();
//参数返回KeyValuePair[2],其中包含Url查询中传递的值
}

希望这有帮助

刚刚发现它在另一个问题上得到了含蓄的回答

它指向的解决方案重定向到

或者,简而言之,您可以这样编写您的请求:


在GET请求中通过URI传递字典键/值!!。为什么不为要检索的数据提供某种id,这样就不必在URII中传递如此庞大的数据了?我假设您希望符合GET请求语义。否则,如果考虑到你正在传递相当多的数据,这是一个通用的解决方案,那么你可能需要做一个很好的POST请求。我认为你无法做到这一点。原因是,web api模型默认模型绑定使用名称比较。例如,如果您有一个名为“toyParams[0].Key”的参数(尽管您不能拥有它),它将与查询字符串参数“toyParams[0],Key”的值“someParameter”等进行映射。您可以通过自定义模型绑定来实现这一点。但是,请不要这样做。我将等待答复,以更新我的知识。这涉及到一个帖子请求,数据将作为帖子正文而不是通过url发送。我正在考虑您的搜索参数问题。您必须具有搜索参数,如param1=value1¶m2=value2等,对吗?现在,您可以创建一个类(DTO,数据传输对象),该类包含属性,即param1、param2及其各自的数据类型。它会填满的!您希望将此方法作为答案吗?旧答案,但这不是一个好的解决方案,在您必须传递多个动力学参数的情况下,此解决方案无效。在GET请求的情况下,还有什么其他方法可用?我很想知道“在GET请求的情况下,还有什么其他方法可用?”请解释(我想知道,因为我想学点东西)