gpt4 book ai didi

c# - 如何避免在 RestSharp 中转义字符?

转载 作者:太空宇宙 更新时间:2023-11-03 13:01:09 26 4
gpt4 key购买 nike

我正在编写一个小型应用程序,它通过 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:

http://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;
}

关于c# - 如何避免在 RestSharp 中转义字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32252548/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com