我一直试图使用几种不同的方法在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) 我最近开始使用RestSharp来使用使用XML的REST服务.
它使反序列化从XML到自定义对象集合的对象变得微不足道.但我的问题是,在发回服务时,最好的重新排序方式是什么?
我应该使用LINQ-to-XML进行重新序列化吗?我尝试使用Serializeable属性和SerializeToXml实用程序函数,但是当我这样做时,似乎打破了RestSharp执行的反序列化.
我试图让Fiddler使用RestSharp女巫使用System.Http.WebProxy,所以我希望它被设置为localhost:8888或127.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为true且host是本地URI.本地请求通过URI中缺少句点(.)来标识,如"http:// webserver /"中所示.
如果host匹配BypassList中的正则表达式.
如果Address为null.
所有其他条件都返回false.
我不明白为什么在我的情况下它返回true,这是一个错误吗?如何让它工作呢?谢谢!
我有非常通用的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) 在我的小库中,我正在编写一个侧面项目,我正在使用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) 我正在使用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会将其发送到服务器而不会抱怨.
我想在一个简短的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) 与此问题类似,是否可以实例化客户端并坚持下去,或者我是否需要为每个呼叫(或一批呼叫)创建一个新实例?
我使用过运行的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) 我正在对浏览器游戏进行测试.此发布请求假定发出构建建筑物的命令.只要我登录,我就可以点击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)