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

标签 c# 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:

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/

相关文章:

c# - 添加新引用后如何在工具箱中查看组件?

c# - 如何让 RestSharp 正确缩小压缩的 HTTP 响应?

c# - restsharp 发出多个异步请求

c# - MySQL Reader 立即关闭

javascript - Ajax 请求 asp.net mvc Controller 返回 500 - 内部服务器错误

javascript - WebAPI 和 401 与 200

c# - 使用 RestClient 上传文件作为 c# 中的多部分/表单数据

c# - RestSharp 接受 header 更改

c# - RestSharp RestRequest.AddBody 不使用 Newton.Json 属性

c# - 如何延迟发送电子邮件?