如何避免在 RestSharp 中转义字符?
How to avoid escaping character in RestSharp?
我正在编写一个小型应用程序,它通过 REST API 将数据发送到服务器,就像简单的 URL 调用一样。我使用 RestSharp 库来执行此操作。我的问题是,我发送的某些数据字符串包含 /
字符。
我不能让角色保持原样,因为调用的 URL 将无效。但是当我用 %2F
替换它时(然后在服务器端翻译回),RestSharp 再次替换 %
字符,给出 %252F
。由于服务器缺少反斜杠,Rest 调用失败。
我有 searched the web 但没有找到解决此问题的有效方法。您知道如何在不使用不同的库并自己重写的情况下解决它吗?此外,不使用反斜杠也不是一个选项。
我的代码在这里:
using RestSharp; //Version 104
private string RestRequest(string URL, RestSharp.Method Method)
{
var Client = new RestClient();
Client.Authenticator = new HttpBasicAuthenticator(ID, Password);
var Request = new RestRequest(URL, Method);
IRestResponse Response = Client.Execute(Request);
return Response.Content;
}
传递给函数的样本URL:
htp://localhost:8080/api/jsonws/knowledge-base-portlet.kbarticle/add-kb-article/portlet-id/1_WAR_knowledgebaseportlet/parent-resource-class-name-id/20704/parent-resource-prim-key/20200/title/SomeTitle/url-title/%2FTitle/content/SomeContent
在窥探了 Resharper 的 Github 问题后,像这样 one,看来你必须使用 RestRequest.AddURLSegment()
。使用 RestSharp v. 104.0.0
进行测试
var url = "http://localhost:4422/api/jsonws/knowledge-base-portlet.kbarticle/add-kb-article/portlet-id/1_WAR_knowledgebaseportlet/parent-resource-class-name-id/20704/parent-resource-prim-key/20200/title/SomeTitle/url-title/{segment}/content/SomeContent";
var Client = new RestClient();
var Request = new RestRequest(url,Method.GET);
Request.AddUrlSegment("segment", "%2Ftitle");
我不知道你是否可以传递多个参数。如果不能,最简单的情况是按 %2F
拆分并连接多个参数。像这样:
private string RestRequest(string URL, RestSharp.Method Method)
{
var Client = new RestClient();
string requestUrl;
bool hasBackslashArgument = ParseEncodedBackSlash(URL, out requestUrl);
RestRequest request;
if (hasBackslashArgument)
{
request = new RestRequest(requestUrl, Method);
request.AddUrlSegment("segment", "%2F");
}
else
{
request = new RestRequest(URL, Method);
}
IRestResponse response = Client.Execute(request);
return response.Content;
}
private bool ParseEncodedBackSlash(string url, out string preformattedString)
{
preformattedString = null;
var urlSegments = url.Split(new string[] { "%2F" }, StringSplitOptions.None);
if (urlSegments.Length == 0) return false;
preformattedString = string.Join("{segment}", urlSegments);
return true;
}
我正在编写一个小型应用程序,它通过 REST API 将数据发送到服务器,就像简单的 URL 调用一样。我使用 RestSharp 库来执行此操作。我的问题是,我发送的某些数据字符串包含 /
字符。
我不能让角色保持原样,因为调用的 URL 将无效。但是当我用 %2F
替换它时(然后在服务器端翻译回),RestSharp 再次替换 %
字符,给出 %252F
。由于服务器缺少反斜杠,Rest 调用失败。
我有 searched the web 但没有找到解决此问题的有效方法。您知道如何在不使用不同的库并自己重写的情况下解决它吗?此外,不使用反斜杠也不是一个选项。
我的代码在这里:
using RestSharp; //Version 104
private string RestRequest(string URL, RestSharp.Method Method)
{
var Client = new RestClient();
Client.Authenticator = new HttpBasicAuthenticator(ID, Password);
var Request = new RestRequest(URL, Method);
IRestResponse Response = Client.Execute(Request);
return Response.Content;
}
传递给函数的样本URL:
htp://localhost:8080/api/jsonws/knowledge-base-portlet.kbarticle/add-kb-article/portlet-id/1_WAR_knowledgebaseportlet/parent-resource-class-name-id/20704/parent-resource-prim-key/20200/title/SomeTitle/url-title/%2FTitle/content/SomeContent
在窥探了 Resharper 的 Github 问题后,像这样 one,看来你必须使用 RestRequest.AddURLSegment()
。使用 RestSharp v. 104.0.0
var url = "http://localhost:4422/api/jsonws/knowledge-base-portlet.kbarticle/add-kb-article/portlet-id/1_WAR_knowledgebaseportlet/parent-resource-class-name-id/20704/parent-resource-prim-key/20200/title/SomeTitle/url-title/{segment}/content/SomeContent";
var Client = new RestClient();
var Request = new RestRequest(url,Method.GET);
Request.AddUrlSegment("segment", "%2Ftitle");
我不知道你是否可以传递多个参数。如果不能,最简单的情况是按 %2F
拆分并连接多个参数。像这样:
private string RestRequest(string URL, RestSharp.Method Method)
{
var Client = new RestClient();
string requestUrl;
bool hasBackslashArgument = ParseEncodedBackSlash(URL, out requestUrl);
RestRequest request;
if (hasBackslashArgument)
{
request = new RestRequest(requestUrl, Method);
request.AddUrlSegment("segment", "%2F");
}
else
{
request = new RestRequest(URL, Method);
}
IRestResponse response = Client.Execute(request);
return response.Content;
}
private bool ParseEncodedBackSlash(string url, out string preformattedString)
{
preformattedString = null;
var urlSegments = url.Split(new string[] { "%2F" }, StringSplitOptions.None);
if (urlSegments.Length == 0) return false;
preformattedString = string.Join("{segment}", urlSegments);
return true;
}