【问题标题】:RestSharp get full URL of a requestRestSharp 获取请求的完整 URL
【发布时间】:2017-01-01 14:55:04
【问题描述】:

有没有办法获取 RestSharp 请求的完整 url,包括它的资源和查询字符串参数?

此请求的 I.E:

RestClient client = new RestClient("http://www.some_domain.com");
RestRequest request = new RestRequest("some/resource", Method.GET);
request.AddParameter("some_param_name", "some_param_value", ParameterType.QueryString);

IRestResponse<ResponseData> response = client.Execute<ResponseData>(request);

我想获取完整的请求 URL:

http://www.some_domain.com/some/resource?some_param_name=some_param_value

【问题讨论】:

    标签: c# asp.net .net restsharp


    【解决方案1】:

    要获取完整的 URL,请使用 RestClient.BuildUri()

    具体来说,在这个例子中使用client.BuildUri(request):

    RestClient client = new RestClient("http://www.some_domain.com");
    RestRequest request = new RestRequest("some/resource", Method.GET);
    request.AddParameter("some_param_name", "some_param_value", ParameterType.QueryString);
    
    IRestResponse<ResponseData> response = client.Execute<ResponseData>(request);
    
    var fullUrl = client.BuildUri(request);
    

    【讨论】:

    • 这很好,但我注意到,根据我的经验,你可以在Execute() 之前调用BuildUri(),这似乎更自然(我想记录我将要做的事情,而不是我刚刚做的事情确实)。
    【解决方案2】:

    嗯,这很棘手。 要获取完整的请求 URL,请使用 RestClient.Execute(request).ResponseUri 以确保它是已发送的请求。

    在这个例子中:

    RestClient client = new RestClient("http://www.some_domain.com");
    RestRequest request = new RestRequest("some/resource", Method.GET);
    request.AddParameter("some_param_name", "some_param_value", ParameterType.QueryString);
    
    IRestResponse<ResponseData> response = client.Execute<ResponseData>(request);
    Uri fullUrl = response.ResponseUri;
    

    这段代码:

    Console.WriteLine(string.Format("response URI: {0}", response.ResponseUri.ToString()));
    

    返回:

    response URI: http://www.some_domain.com/some/resource?some_param_name=some_param_value
    

    【讨论】:

    • 在我的应用程序 response.ResponseUri 中只包含基本 uri 而不添加所有参数
    • 这不是请求 Uri,而是响应 Uri(根据文档:“实际响应内容的 URL(如果重定向与请求不同)”)
    • @Rogala:是的,你是对的。在重定向的情况下,可以使用string request_url = $"{client.BaseUrl}/{response.Request.Resource}",但是获取不到参数。
    • @PetrKrampl 我可能是错的,但这并没有考虑到查询参数。如果您可以访问客户端(假设不在扩展方法中),那么适当的答案是另一个答案,即 client.BuildUri(request);
    猜你喜欢
    • 2017-07-09
    • 2013-06-08
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-15
    • 2022-07-18
    • 2015-06-26
    相关资源
    最近更新 更多