附加URL查询字符串以进行请求

时间:2016-01-21 16:21:24

标签: restsharp

我尝试发送POST请求并以特定格式格式化查询字符串。订单与第一个参数不同,但我没有成功。

我需要什么:

  

本地主机/ someapp / API / DoSomething的/ 5335?save=false&userid=66462

我的一些尝试吐了出来:

  

http://localhost/someapp/api/dosomething/?Id=29455&save=false&userId=797979   http://localhost/someapp/api/dosomething/?save=false&userId=797979

我如何格式化请求:

    request.AddQueryParameter("Id", "29455");
    request.AddQueryParameter("save", "false");
    request.AddQueryParameter("user", "4563533245");

如果我为AddParameter尝试Id,则不会在查询字符串上添加(我想是因为它是POST而不是GET),所以那不会起作用。 API不期待表格,它期待:

(string id, List<Dictionary<string,string>>)

我可以使用StringBuilder,但这感觉不对。我不确定UrlSegment是否也是最好的方法,因为我基本上会破解查询字符串。有没有办法使用RestSharp的API以我需要的格式格式化我的请求?

2 个答案:

答案 0 :(得分:1)

我最终使用的是UrlSegment,然后保留.AddQueryParameter方法,因此最终的代码块如下所示:

var url = new RestClient(localhost/someapp/api/dosomething/{id});
var request     = new RestRequest(Method.POST);

request.AddParameter("Id", "5335", ParameterType.UrlSegment);
request.AddQueryParameter("save", "true");
request.AddQueryParameter("UserId", "5355234");

哪个产生了我需要的URI。

答案 1 :(得分:0)

如果您不确定如何编码,使用RestSharp或任何其他API客户端库的最简单编码过程就是使用Postman生成。下载Postman,执行新请求,输入URL字符串以发送到API,单击Code,然后从下拉列表中选择C#(RestSharp)。这是它生成的代码。

Abstracts = {1: 'Lorem ipsum dolor sit amet,',
             2: 'consetetur sadipscing elitr,',
             3: 'sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,',
             4: 'sed diam voluptua.',
             5: 'At vero eos et accusam et justo duo dolores et ea rebum.',
             6: 'Stet clita kasd gubergren,',
             7: 'no sea takimata sanctus est Lorem ipsum dolor sit amet.',
            }


inverted_index = {'Stet': {6}, 'ipsum': {1, 7}, 'erat,': {3}, 'ut': {3}, 'dolores': {5}, 'gubergren,': {6}, 'kasd': {6}, 'ea': {5}, 'consetetur': {2}, 'sit': {1, 7}, 'nonumy': {3}, 'voluptua.': {4}, 'est': {7}, 'elitr,': {2}, 'At': {5}, 'rebum.': {5}, 'magna': {3}, 'sadipscing': {2}, 'diam': {3, 4}, 'dolore': {3}, 'sanctus': {7}, 'labore': {3}, 'sed': {3, 4}, 'takimata': {7}, 'Lorem': {1, 7}, 'invidunt': {3}, 'aliquyam': {3}, 'accusam': {5}, 'duo': {5}, 'amet.': {7}, 'et': {3, 5}, 'sea': {7}, 'dolor': {1, 7}, 'vero': {5}, 'no': {7}, 'eos': {5}, 'tempor': {3}, 'amet,': {1}, 'clita': {6}, 'justo': {5}, 'eirmod': {3}}

def and_query(tokens):
    print("tokens:{}".format(tokens))
    #terms = preprocess(tokenize(tokens))
    terms = tokens.split()

    term_min = None
    for term in terms:
        if term in inverted_index:
            # Find min
            if not term_min or term_min[0] > len(inverted_index[term]):
                term_min = (len(inverted_index[term]), term)
        else:
            # Break early, if a term is not in inverted_index
            return set()

    finals = inverted_index[term_min[1]]
    print("term_min:{} inverted_index:{}".format(term_min, finals))
    return finals


def finals_print(finals):
    if finals:
        for final in finals:
            print("Document [{}]:{}".format(final, Abstracts[final]))
    else:
        print("No matching Document found")

if __name__ == "__main__":
    for tokens in ['sed diam voluptua.', 'Lorem ipsum dolor', 'Lorem ipsum dolor test']:
        finals_print(and_query(tokens))
        print()