标签: restsharp

无法使用RestSharp发送cookie

我一直试图使用几种不同的方法在Windows Phone上访问基于REST的API,但我似乎遇到了将cookie附加到请求中的问题.我已经尝试过这种WebClient方法(现在似乎已经标记为SecurityCritical,因此您不能再继承它并添加代码).我简要地看了一下HttpWebRequest,看起来很麻烦.

现在我正在使用RestSharp,它似乎可以使用,但我仍然遇到问题,我的cookie没有被添加到请求发送时.

我的代码如下:

// ... some additional support vars ...
private RestClient client;

public ClassName() {
    client = new RestClient();
    client.BaseUrl = this.baseAddress.Scheme + "://" + baseAddress.DnsSafeHost;
}

public void GetAlbumList()
{
    Debug.WriteLine("Init GetAlbumList()");

    if (this.previousAuthToken == null || this.previousAuthToken.Length == 0) 
    {
        throw new MissingAuthTokenException();
    }

    RestRequest request = new RestRequest(this.baseUrl, Method.GET);

    // Debug prints the correct key and value, but it doesnt seem to be included
    // when I run the request
    Debug.WriteLine("Adding …
Run Code Online (Sandbox Code Playgroud)

.net c# windows-phone-7 restsharp

7
推荐指数
2
解决办法
7926
查看次数

使用RestSharp发布数据时序列化对象

我最近开始使用RestSharp来使用使用XML的REST服务.

它使反序列化从XML到自定义对象集合的对象变得微不足道.但我的问题是,在发回服务时,最好的重新排序方式是什么?

我应该使用LINQ-to-XML进行重新序列化吗?我尝试使用Serializeable属性和SerializeToXml实用程序函数,但是当我这样做时,似乎打破了RestSharp执行的反序列化.

.net c# rest web-services restsharp

7
推荐指数
1
解决办法
4813
查看次数

如何使System.Net.WebProxy不绕过本地URL?

我试图让Fiddler使用RestSharp女巫使用System.Http.WebProxy,所以我希望它被设置为localhost:8888127.0.0.1:8888

这是代码:

    var webProxy = new WebProxy(new Uri("http://127.0.0.1:8888"))
    {
        BypassProxyOnLocal = false
    };

    var bypassed = webProxy.IsBypassed(new Uri("http://127.0.0.1"));
    Console.WriteLine(bypassed);
Run Code Online (Sandbox Code Playgroud)

输出:true

MSDN声明如下:

IsBypassed方法用于确定是否要访问因特网资源时绕过代理服务器.

BypassProxyOnLocal和BypassList属性控制IsBypassed方法的返回值.

在以下任何条件下,IsBypassed都返回true:

  • 如果BypassProxyOnLocal为truehost是本地URI.本地请求通过URI中缺少句点(.)来标识,如"http:// webserver /"中所示.

  • 如果host匹配BypassList中的正则表达式.

  • 如果Address为null.

所有其他条件都返回false.

我不明白为什么在我的情况下它返回true,这是一个错误吗?如何让它工作呢?谢谢!

.net c# proxy webproxy restsharp

7
推荐指数
1
解决办法
4104
查看次数

使用RestSharp从一个资源反序列化不同的数据输出

我有非常通用的web服务,它响应许多标准的http状态.但是,它会根据这些状态返回不同的类型.这是完全正确的REST实现:我获取状态为200(OK)的Person实体,但是当发生错误时,例如auth问题,我收到带有错误消息列表的403(Forbidden)(说明令牌已过期或我的帐户是不活动等).

不幸的是,使用RestSharp我只能"绑定"到我应该期望的一种数据类型:

  client.ExecuteAsync<Person>(request, (response) =>
  {
        callback(response.Data);
  });
Run Code Online (Sandbox Code Playgroud)

当状态不是200时,我该如何捕获错误消息?当然,我可以手动执行此操作并自行反序列化响应内容,但我认为应该有一些更清晰,更好的方法来实现它.我想用这样的东西:

  client.ExecuteAsync<Person, ErrorList>(request, (response) =>
  {
        if (response.StatusCode == HttpStatusCode.OK)
        {
            Callback(response.Data);
        }
        else if (response.StatusCode == HttpStatusCode.OK)
        {
            ErrorCallback(response.Errors);
        }
  });
Run Code Online (Sandbox Code Playgroud)

c# rest web-services http restsharp

7
推荐指数
1
解决办法
3107
查看次数

根据内容动态地将JSON反序列化为派生类型?

在我的小库中,我正在编写一个侧面项目,我正在使用RestSharp从Web API获取Json.对模型类的反序列化对于简单类型可以正常工作,但是在请求时有结果类型未知(或不清楚)的端点.

特别是它的GuildWars2 API v1和一个例子是项目数据.当然,每个项目都有基本属性,并根据查询的项目设置其他值.例如,武器有一些修饰符等等.

我的想法是为所有基本属性创建一个抽象的Item类,并从该类派生所有现有的子类型,添加所需的属性.我的问题是,如何决定要反序列化的子类.我已经阅读过各种涉及向Json字符串添加限定类型名称的方法,但由于我只从API获取数据,因此无法影响我的响应.

理想情况下,我总是希望反序列化到基类Item中,反序列化器通过Json字符串中包含的给定属性来决定实际类型.这是否可能?或者有更好的方法来解决这个问题吗?

提前致谢

编辑:这是武器的Json示例:

{
  "item_id": "30704",
  "name": "Twilight",
  "description": "",
  "type": "Weapon",
  "level": "80",
  "rarity": "Legendary",
  "vendor_value": "100000",
  "icon_file_id": "456031",
  "icon_file_signature": "CE3AF0B7B9BB6244726779F5B6A930541BA6C15F",
  "game_types": ["Activity", "Dungeon", "Pve", "Wvw"],
  "flags": ["HideSuffix", "NoSell", "SoulBindOnUse"],
  "restrictions": [],
  "weapon": {
    "type": "Greatsword",
    "damage_type": "Physical",
    "min_power": "995",
    "max_power": "1100",
    "defense": "0",
    "infusion_slots": [],
    "infix_upgrade": {
      "attributes": [
        {
          "attribute": "Power",
          "modifier": "179"
        },
        {
          "attribute": "Power",
          "modifier": "179"
        }
      ]
     },
     "suffix_item_id": "24599"
   }
}
Run Code Online (Sandbox Code Playgroud)

这将是一件盔甲:

{
  "item_id":"500",
  "name":"Carrion Conjurer …
Run Code Online (Sandbox Code Playgroud)

c# json restsharp deserialization

7
推荐指数
1
解决办法
2372
查看次数

如何让RestSharp使用BSON?

我正在使用RestSharp,并使用Json.NET进行序列化(请参阅此处).

Json.NET支持BSON,由于我的一些请求有大量的二进制数据块,我认为这会大大加快我的应用程序.但是,据我所知,RestSharp似乎没有任何内置的BSON支持.

使用Json.NET作为RestSharp的自定义序列化程序实现,因此乍一看它似乎可以修改该自定义序列化程序以使用BSON.但是,接口的Serialize方法RestSharp.Serializers.ISerializer返回string- 这是(我假设)不适合BSON.因此,我假设需要对RestSharp进行一些更重要的更改才能实现此更改.

有没有人想出办法做到这一点?


更新:我查看了RestSharp源代码,发现RestRequest.AddBody接受我的对象并将其序列化到请求体中的方法最终调用Request.AddParameter(使用序列化对象数据和参数类型RequestBody).

我想我可能能够将我的对象序列化为BSON,然后Request.AddParameter直接调用- 事实上我可以.但是,当RestSharp然后执行时RestRequest,它无法将二进制内容放入请求中,因为有关于请求内容的其他嵌入式假设是UTF-8编码的.

因此看起来这个hack不起作用 - 需要对RestSharp本身进行一些更改,而且我不是那个工作的人......


更新2:我决定使用调试器来计算我需要更改多少RestSharp以克服正文编码问题,所以我换掉了我的NuGet版本的RestSharp并将RestSharp项目包含在我的解.而且......它奏效了.

事实证明,在过去的几个月里,RestSharp已经发生了变化,而NuGet版本还没有.

因此,您现在可以使用AddParameter并传入已经BSON编码的对象,而RestSharp会将其发送到服务器而不会抱怨.

serialization json.net bson restsharp

7
推荐指数
1
解决办法
1011
查看次数

RESTSharp在反序列化XML时遇到问题,包括字节顺序标记?

我想在一个简短的C#应用​​程序中使用一个公共Web服务:http: //ws.parlament.ch/

从此Web服务返回的XML在开头有一个"BOM",这会导致RESTSharp无法通过以下错误消息对XML进行反序列化:

检索响应时出错.查看内部细节以获取更多信息.---> System.Xml.XmlException:根级别的数据无效.第1行, 位于System.Xml.XmlTextReaderImpl.Throw(Exception e)
的System.Xml.XmlTextReaderImpl.Throw(String res,String arg),位于System.Xml.XmlTextReaderImpl的System.Xml.XmlTextReaderImpl.ParseRootLevelWhitespace()处. System.Xml.Linq.XDocument.Parse上的System.Xml.Linq.XDocument.Load(XmlReader reader,LoadOptions选项)中的System.Xml.XmlTextReaderImpl.Read()处的ParseDocumentContent()(String text,LoadOptions options)
在RestSharp.RestClient.Deserialize [T](IRestRequest请求,IRestResponse raw)的RestSharp.Deserializers.XmlDeserializer.Deserialize [T](IRestResponse响应)的System.Xml.Linq.XDocument.Parse(String text)
---结束内部异常堆栈跟踪---

以下是使用http://ws.parlament.ch/sessions?format=xml获取" 会话 " 列表的简单示例:

public class Session
{
    public int Id { get; set; }
    public DateTime? Updated { get; set; }
    public int? Code { get; set; }
    public DateTime? From { get; set; }
    public string Name { get; set; }
    public DateTime? To { get; set; }
}


static void Main(string[] args) …
Run Code Online (Sandbox Code Playgroud)

c# byte-order-mark restsharp

7
推荐指数
1
解决办法
3578
查看次数

将单个实例维护到RestSharp客户端

此问题类似,是否可以实例化客户端并坚持下去,或者我是否需要为每个呼叫(或一批呼叫)创建一个新实例?

c# restsharp

7
推荐指数
2
解决办法
9987
查看次数

无法从程序集'RestSharp,Version = 105.1.0.0加载'RestSharp.Authenticators.HttpBasicAuthenticator'类型

我使用过运行的MVC Web应用程序ASP.NET Framework version 4.5.1.我做了nopcommercePlugin.我正在将版本3.4升级到3.5

更新后,我收到以下错误:

System.TypeLoadException: Could not load type
 'RestSharp.HttpBasicAuthenticator' from assembly 'RestSharp,
 Version=105.2.1.0, Culture=neutral, PublicKeyToken=null'.
Run Code Online (Sandbox Code Playgroud)

Twilio用来发送短信:

using Twilio;

public bool MethodName(string FromNumber, string ToNumber, string URL, string code = "")
        {

            if (code == "")
            {
                //URL = URL.Replace(" ", "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20");
                URL = URL.Replace(" ", "%20");

            }
            else
            {
                URL = URL + code + " we repeat your code is : " + code;
                URL = URL.Replace(" ", "%20");
            } …
Run Code Online (Sandbox Code Playgroud)

twilio restsharp

7
推荐指数
2
解决办法
4104
查看次数

用C#模拟Postman Post - RestSharp

我正在对浏览器游戏进行测试.此发布请求假定发出构建建筑物的命令.只要我登录,我就可以点击Postman Send按钮,它工作正常.这意味着没有值到期.但是,如果我退出并重新登录,那么它将无法工作.我将不得不通过该生成另一个Postman帖子interceptor.

我想用C#模拟这个帖子请求;

这是我的帖子在Postman中的样子;

邮递员的标题 在此输入图像描述

邮差中的身体参数 在此输入图像描述

如果您安装了邮递员,请单击此处导入请求.

这是我的C#代码.我正在使用名为RestSharp的库;

var client = new RestClient(@"https://tr42.klanlar.org");
var request = new RestRequest("game.php", Method.POST);
request.AddQueryParameter("village", "31413"); // adds to POST or URL querystring based on Method
request.AddQueryParameter("screen", "main"); // adds to POST or URL querystring based on Method
request.AddQueryParameter("ajaxaction", "upgrade_building"); // adds to POST or URL querystring based on Method
request.AddQueryParameter("type", "main"); // adds to POST or URL querystring based on Method
request.AddQueryParameter("h", "98e34aa6"); // adds to POST or …
Run Code Online (Sandbox Code Playgroud)

c# http-post restsharp dotnet-httpclient postman

7
推荐指数
1
解决办法
9718
查看次数