RestSharp获取请求的完整URL

43

有没有一种方法可以获取RestSharp请求的完整URL,包括其资源和查询字符串参数?

例如,对于此请求:

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
2个回答

88
要获取完整的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);

8
很好,但是根据我的经验,你可以在执行Execute()之前调用BuildUri(),这样似乎更自然(我想记录我要做的事情,而不是刚刚做过的事情)。 - Chris Nelson

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,而没有添加所有参数。 - Till
1
这不是请求Uri,而是响应Uri(根据文档:“实际响应内容的URL(如果重定向则与请求不同)”) - Rogala
@Rogala:是的,你说得对。在重定向的情况下,你可以使用string request_url = $"{client.BaseUrl}/{response.Request.Resource}",但你无法获取参数。 - Petr Krampl
@PetrKrampl 我可能错了,但这没有考虑到查询参数。如果您可以访问客户端(假设不是在扩展方法中),那么正确的答案是另一个答案,即 client.BuildUri(request); - Rogala

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接