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

时间:2015-10-12 17:11:27

标签: c# asp.net asp.net-web-api

我在这里阅读了所有类似的问题,但我无法提出解决方案。我正在尝试调用web-api方法:

[HttpGet]
public SearchViewModel Get(SearchTypes type, string text, [FromUri]Dictionary<string, string> toyParams)
{
    //Code here
}

我希望从uri获取最后一个参数。我试过了

  

http://localhost:39101/#!/search/toys/fox?someParameter=123

  

http://localhost:39101/#!/search/toys/fox?toyParams[0].Key=someParameter&toyParams[0].Value=123

但toyParams Dictionary总是空着。

3 个答案:

答案 0 :(得分:2)

刚刚发现它在另一个问题here中得到了隐式回答。

它指向的解决方案将重定向到Model Binding in ASP.NET Core

或者简而言之,您只需要这样编写请求:

  

http://localhost:39101/#!/search/toys/fox?toyParams[someParameter1]=123&toyParams[someParameter2]=456

答案 1 :(得分:0)

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

我有以下网址- http://localhost:49980/api/MyRestAPI/postSomeData/?a=v&d=e

以下是我的方法,用Web API 2编写-

[HttpPost]
public IHttpActionResult SaveDataFromRestToDB(string dataKey) {
     var parameters = this.Url.Request.GetQueryNameValuePairs();
     //parameters returns KeyValuePair<string, string>[2], containing values passed in Url Query
}

希望这会有所帮助!

答案 2 :(得分:-4)

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

    //DTO
    public class SearchDTO
    {
        public int MyProperty1 { get; set; }
        public int MyProperty2 { get; set; }
        public int MyProperty3 { get; set; }
    }

其中MyProperty1MyProperty2MyProperty3是必须搜索某些内容的参数。

        //GET Method
        public string Get([FromUri]SearchDTO searchDTO)
        {
            return "search result";
        }

以下是呼叫网址:

http://localhost:56880/api/values?myproperty1=1&myproperty2=2&myproperty3=3