标签: restsharp

使用RestSharp POST压缩JSON字符串的正确方法是什么?

我想在POST某个地方使用RestSharp .我直接发布JSON(而不是POCO).因为我发布了普通的JSON,我相信我需要使用这种解决方法而不是设置Body:

request.AddParameter(
    "application/json", myJsonString, ParameterType.RequestBody);
Run Code Online (Sandbox Code Playgroud)

当我没有压缩JSON时,这很好用.当我这样做时,使用这个:

request.Headers.Add("Content-Encoding", "gzip");
request.AddParameter(
    "application/json", 
     GZipStream.CompressString(myJsonString), 
     ParameterType.RequestBody);
Run Code Online (Sandbox Code Playgroud)

这不起作用.我逐步完成了代码RestClient::ConfigureHttp,我看到了:

http.RequestBody = body.Value.ToString();
Run Code Online (Sandbox Code Playgroud)

因为我给出了一个字节数组,body.Value所以设置为System.Byte[]

有没有办法让RestSharp在POST请求中处理gzip压缩的json字符串?

api rest http restsharp

6
推荐指数
0
解决办法
649
查看次数

当类具有不同的名称时,如何使用RestSharp执行内部XML节点?

我正在使用restsharp并遇到了问题.由于我使用google api返回xml数据,因此我遇到名称冲突.

例如,返回来自google contact api的所有"group"和"all contacts"都有一个"feed"的根节点,但其中包含不同的数据.

所以我这样做了

[XmlRoot(ElementName = "feed")]
public class GroupFeed
{
    public string Id { get; set; }
    public DateTime Updated { get; set; }
    public string Title { get; set; }
    public int TotalResults { get; set; }
    public int StartIndex { get; set; }
    public int ItemsPerPage { get; set; }
    [XmlElement(ElementName="Entry")]
    public List<GroupEntry> Entries { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

通过使用XmlRoot属性,它在我使用restsharp时起作用,但它从不填充Entries,即使它们是数据.

[XmlRoot(ElementName = "entry")]
public class GroupEntry
{
    public string Id { get; set; } …
Run Code Online (Sandbox Code Playgroud)

xml restsharp

6
推荐指数
1
解决办法
603
查看次数

使用RestSharp进行Web API调用 - 将application/json添加到body,从而在操作上导致null参数

我有一个Web API服务,我试图通过控制台使用RestSharp访问.我的RestSharp代码如下所示:

            RestClient client = new RestClient(baseUrlString);
        RestRequest request = new RestRequest("controllername/actionname");
        request.RequestFormat = DataFormat.Json;

        ProcessQuestion model = new ProcessQuestion()
        {
            Id = "123456",
            InstanceId = "123",
            UniqueId = "bfb16a18-d0d6-46ab-a5b3-2f0ebbfe8626",
            PostedAnswer = new Dictionary<string, string>() { { "question_7907_1", "selected" }, { "question_7907_2", "selected" } }
        };
        request.AddBody(model);

        var response = client.Execute(request)
Run Code Online (Sandbox Code Playgroud)

我的Web API操作采用与上述模型具有相同参数的模型.调用执行时,绑定失败,参数为null.我怀疑这是由于RestRequest.AddBody方法将application/json预先添加到body值,如下所示:

{application/json={"Id":"123456","InstanceId":"123","UniqueId":"bfb16a18-d0d6-46ab-a5b3-2f0ebbfe8626","PostedAnswer":{"question_7907_1":"selected","question_7907_2":"selected"}}}
Run Code Online (Sandbox Code Playgroud)

如果我使用Fiddler发布,身体会正确地绑定到模型.以下是我在Fiddler中提供的身体价值:

{'Id':'123456','InstanceId':'123','Uniqueid':'bfb16a18-d0d6-46ab-a5b3-2f0ebbfe8626','PostedAnswer':{'question_7907_1':'selected','question_7907_2':'selected'}}
Run Code Online (Sandbox Code Playgroud)

请注意,fiddler中的body值是相同的,除了preing application/json键.

还要注意:我已经尝试过似乎所有东西......我已经在动作中分离了参数,使用了FromBody和FromUri属性,尝试了自定义DictionaryModelBinder,尝试了自定义ValueBinders,试图改变我使用RestSharp的方式(带有RequestBody参数的AddParameter,AddObject,不同的URL样式等).

有没有其他人遇到这个,如果有的话,你解决了吗?我为这项服务选择了Web API,希望模型绑定能像在MVC中那样工作,但我看到的并非如此.

谢谢

编辑(已解决):RestSharp自动将JsonSerializer用于AddBody方法中传递的对象.我想我错过了一些简单的东西,事实上我是......将Method.Post参数添加到RestRequest实例化解决了这个问题.

rest request model-binding restsharp asp.net-web-api

6
推荐指数
1
解决办法
6484
查看次数

restsharp 接受编码禁用压缩

在特定情况下,我需要能够在请求/响应中禁用压缩。

使用 Firefox RestClient 我能够将一些 xml 发布到 Web 服务并使用单个标头参数“Accept-Encoding”:“”成功获得一些响应 xml,如果我不设置此标头,则响应正文将返回压缩响应正文中的一些二进制数据(这就是我想在响应中禁用 gzip 的原因)

现在在我的应用程序中使用相同的标头值(在 C# 中使用 RestSharp),我仍然得到二进制数据 (gzip) 作为响应。

有人可以透露一些信息吗?RestSharp 支持吗?

restsharp http-accept-encoding

6
推荐指数
1
解决办法
3268
查看次数

如何使用访问令牌进行 Bitbucket API 调用?

我创建了一个 ASP.NET MVC 应用程序,它可以在 Bitbucket 上授权用户。我使用CSharp.Bitbucket 库来获取令牌秘密和令牌值。

OAuth的教程说,与令牌,我可以进行API调用。

我知道我可以像这样使用基本授权调用 API:

 string url = "https://bitbucket.org/api/1.0/user/";
 var request = WebRequest.Create(url) as HttpWebRequest;

 string credentials = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes("username" + ":" + "password"));
 request.Headers.Add("Authorization", "Basic " + credentials);

 using (var response = request.GetResponse() as HttpWebResponse)
 {
    var reader = new StreamReader(response.GetResponseStream());
    string json = reader.ReadToEnd();
 }
Run Code Online (Sandbox Code Playgroud)

但是如何使用访问令牌调用 API?

非常感谢!

c# oauth bitbucket restsharp bitbucket-api

6
推荐指数
1
解决办法
3123
查看次数

C# RestSharp 库和 Kerberos 身份验证

C# RestSharp 库与 Kerberos 身份验证的兼容性如何?

我可以看到有一个,NtlmAuthenticator但我们是否需要使用 Kerberos 实现相同的功能,还是由底层 HTTP 调用自动管理?

kerberos restsharp

6
推荐指数
0
解决办法
865
查看次数

将文件以及一些参数发布到 web api

我有 Web api 控制器上传控制器,它具有PostUpload将数据存储到数据库的方法。

现在我正在尝试将文件和一些参数发布到该 web api,但所有尝试都失败了,比如通过数组列表,json 对象,我们不能将文件和参数发布到 web api?

var request = new RestRequest("Uploads", Method.POST);
request.RequestFormat = DataFormat.Json;

request.AddHeader("Content-Type", "application/json");
request.AddFile("filename", Server.MapPath("/Images/137549014628194.R6MyHlYrIfIo3BWPIytG_height640.png"), "image/png");
request.AddFile("filename", Server.MapPath("/Images/137549014628194.R6MyHlYrIfIo3BWPIytG_height640.png"), "image/png");
request.AddFile("filename", Server.MapPath("/Images/137549014628194.R6MyHlYrIfIo3BWPIytG_height640.png"), "image/png");
request.AddParameter("participantsId", 2);
request.AddParameter("taskId", 77);
request.AddParameter("EnteredAnswerOptionId", 235);
IRestResponse response = createClient().Execute(request);
Run Code Online (Sandbox Code Playgroud)

网络API方法:

[HttpPost]
public string PostUpload(int? participantsId, int? taskId, int? EnteredAnswerOptionId)
{
    var file = HttpContext.Current.Request.Files.Count > 0 ?
    HttpContext.Current.Request.Files[0] : null;
    if (file.ContentLength > 0)
    {
        var fileName = Path.GetFileName(file.FileName);
        var path = Path.Combine(HttpContext.Current.Server.MapPath("~/uploads"), fileName);
        file.SaveAs(path); 
    }
    return …
Run Code Online (Sandbox Code Playgroud)

c# json restsharp asp.net-web-api

6
推荐指数
1
解决办法
2万
查看次数

将代码从 RestSharp 转换为 HttpClient

有人可以帮我将使用 RestSharp 的这个 ASP .Net Core 示例(在我的 Web Api 中使用以使用来自 Auth0 的管理 API)转换为一个使用 HttpClient 的示例吗?

var client = new RestClient("https://YOUR_AUTH0_DOMAIN/oauth/token");
var request = new RestRequest(Method.POST);
request.AddHeader("content-type", "application/json");
request.AddParameter("application/json", "{\"grant_type\":\"client_credentials\",\"client_id\": \"YOUR_CLIENT_ID\",\"client_secret\": \"YOUR_CLIENT_SECRET\",\"audience\": \"https://YOUR_AUTH0_DOMAIN/api/v2/\"}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Run Code Online (Sandbox Code Playgroud)

我一直在挣扎......我有这个:

var client = new HttpClient();
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.BaseAddress = new Uri("https://YOUR_AUTH0_DOMAIN/oauth/token");
Run Code Online (Sandbox Code Playgroud)

但我不确定其余的...谢谢

c# restsharp asp.net-core-webapi asp.net-core-1.1

6
推荐指数
1
解决办法
8636
查看次数

令牌已过期或已撤销 - Google Ads

您好,我一直在使用 REST 方法在 C# 中集成 Google Ads API。一切似乎都工作正常,但突然间我开始收到带有错误消息的 400 响应。

{
    "error": "invalid_grant",
    "error_description": "Token has been expired or revoked."
}
Run Code Online (Sandbox Code Playgroud)

如上所述,我没有使用客户端库,而是使用 Restsharp 并使用邮递员测试我的所有端点。

它发生的任何原因是什么?我的刷新令牌也有效。我已经使用这个一周了。我也没有达到刷新令牌的限制,因为当我尝试设置帐户时,我只生成了 3 到 4 次刷新令牌。

我相信刷新令牌的有效性是终生的,那么为什么会发生这种情况呢?

c# google-ad-manager restsharp postman google-ads-api

6
推荐指数
1
解决办法
5583
查看次数

无法使用 RestSharp 断言错误请求 [HTTP 400 错误]。抛出 System.Net.Http.HttpRequestException

我使用 RestSharp 编写了以下测试,预期结果是返回错误 400 以及一些 Json 格式的错误消息。

但以下测试在等待 client.PostAsync(request) 处失败并抛出“System.Net.Http.HttpRequestException:请求失败,状态代码为 BadRequest”,并且未到达断言语句。

使用 Fiddler 我验证了我的请求,并且响应按预期工作。

将不胜感激任何解决这个问题的建议。谢谢你!

    [Test]
    public async Task Test1Async()
    {
        var jsonData = json;
        var client = new RestClient(endpoint);
        var request = new RestRequest();
        request.AddStringBody(jsonData, ContentType.Json);
        var response = await client.PostAsync(request);
        Assert.AreEqual(400, response.StatusCode);
    }
Run Code Online (Sandbox Code Playgroud)

有效的解决方案。谢谢尼古拉斯·费尔赫斯特...

    [Test]
    public async Task Test1Async()
    {
        var jsonData = json;
        var client = new RestClient(endpoint);
        var request = new RestRequest();
        request.AddStringBody(jsonData, ContentType.Json);
        var response = await client.ExecutePostAsync(request);
        Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode);
    }
Run Code Online (Sandbox Code Playgroud)

c# restsharp web-api-testing

6
推荐指数
1
解决办法
3850
查看次数