我的Windows Phone 7项目中的一个NUnit测试因以下错误而失败:
Error 4 Test 'MyProject.Tests.Unit.Service.TaskServiceTests.Save_CallsWebService_WhenCalledWithTaskAndSession' failed: System.IO.FileNotFoundException : Could not load file or assembly 'System.Runtime.Serialization, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e' or one of its dependencies. The system cannot find the file specified.
at Newtonsoft.Json.Serialization.DefaultContractResolver.InitializeContract(JsonContract contract)
at Newtonsoft.Json.Serialization.DefaultContractResolver.CreateObjectContract(Type objectType) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\Serialization\DefaultContractResolver.cs:line 279
at Newtonsoft.Json.Serialization.DefaultContractResolver.CreateContract(Type objectType) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\Serialization\DefaultContractResolver.cs:line 545
at Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContract(Type type) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\Serialization\DefaultContractResolver.cs:line 188
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.GetContractSafe(Object value) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalWriter.cs:line 84
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(JsonWriter jsonWriter, Object value) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalWriter.cs:line 67
at Newtonsoft.Json.JsonSerializer.SerializeInternal(JsonWriter jsonWriter, Object value) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\JsonSerializer.cs:line 451
at Newtonsoft.Json.JsonConvert.SerializeObject(Object value, Formatting formatting, …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 RestSharp 向 API 发出请求。此 API 通过将请求重定向到登录服务器、使用基本凭据进行身份验证、获取 cookie,然后重定向回 API 来进行保护。恐怕我无法控制这个。
所以请求的顺序是:
Request Response
---------------------------------------------------------------------------------
1. GET http api server 302 Found to login server
2. GET https login server 401 Unauthorized
3. GET https login server with basic credentials 302 Found to api server with cookies
4. GET http api server with cookies 200 OK
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用 RestSharp 来做到这一点。这是我的代码:
var client = new RestClient("api server")
{
Authenticator = new HttpBasicAuthenticator("username", "password")
};
var request = new RestRequest("api path", Method.GET);
var result …Run Code Online (Sandbox Code Playgroud) 我是基于 Web 的解决方案的新手。我正在使用 RestSharp 库访问休息 url。
我的代码如下:
var cleint = new RestClient("http://REST_URL");
cleint.Authenticator = new HttpBasicAuthenticator("username", "password");
var request = new RestRequest();
request.Method = Method.GET;
request.Resource = "0.json";
IRestResponse response = cleint.Execute(request);
if (response != null && ((response.StatusCode == HttpStatusCode.OK) &&
(response.ResponseStatus == ResponseStatus.Completed)))
{
// var arr = JsonConvert.DeserializeObject<JArray> (response.Content);
}
Run Code Online (Sandbox Code Playgroud)
当我手动点击它时,该 url 返回一个 json 文件。但我想使用 C# 控制台应用程序来获取 json 文件并将其保存到磁盘。当我运行上述代码时,我收到了未经授权的响应:
response.ResponseStatus= "Unauthorized"
我有一个对象
var testTcc = new TrendingConfigurationConfigDto
{
TrendingConfigurationId =1,
ConfigId = 1,
DeviceId = 1,
Selected = true,
YAxisPosition = YAxisPosition.Left,
Order = 1,
Color = "#ffffff",
Configuration = new BO.Shared.Dtos.List.ConfigurationListDto
{
Id = 1,
Name = "configuration",
Alias = "configuationAlias",
EnableEdit = true,
IsBusinessItem = true
},
Device = new BO.Shared.Dtos.List.DeviceListDto
{
Id = 1,
Name = "Device"
}
};
Run Code Online (Sandbox Code Playgroud)
当我将其序列化为json时
var jsonTcc = SimpleJson.SerializeObject(testTcc);
Run Code Online (Sandbox Code Playgroud)
它返回的字符串包含YAxisPosition = 1的json对象,当我尝试使用
testTcc = SimpleJson.DeserializeObject<TrendingConfigurationConfigDto>(jsonTcc);
Run Code Online (Sandbox Code Playgroud)
它给出异常System.InvalidCastException,并显示消息“指定的转换无效”。
我尝试将json字符串中的YAxisPosition值更改为字符串“ 1”或“ Left”,这总是给我相同的错误,直到我从json字符串中删除了属性YAxisPosition。
我可能缺少一些东西(枚举属性上的Attribute或类似的东西)。
请帮助我找到一种方法,以便我可以使用RestSharp对包含Enum类型属性的对象进行序列化和反序列化。
注意:我尝试使用NewtonSoft成功进行序列化和反序列化。但是我不希望Web API客户端依赖NetwonSoft,因为我已经在使用RestSharp。
我正在使用RestSharp为Qualtrics API(v 2.5)编写C#实现.调用方法getUserIds时,它返回JSON格式的用户列表(请参阅下面的示例输出).
我面临的问题/问题是,对于每个用户对象(下面的对象列表Result),它会生成一个不同的id,从URH_.当使用json2csharp时,它假设它总是一个不同的类,而实际上它与你在输出中看到的完全相同,并且如api的文档中所述.我怎样才能最好地解决这个问题 - 这样我才能创建一个UserData可以重用的课程?因为现在我显然总是URH_在每个响应中看到这些随机前缀类.
注意:我以为我可以尝试先按下响应,当我得到响应时,用字符串替换URH_根Result对象下的每个前缀对象"UserData"- 但我觉得这有点违反规则,并认为社区会有一个更好的解决方
下面是原始JSON输出(请注意,我删除了敏感信息):
{"Meta":{"Status":"Success","Debug":""},"Result":{"URH_3wpA9pxGbE0c7Xu":{"DivisionID":null,"UserName":"user.name@domain.com","UserFirstName":"x","UserLastName":"x","UserAccountType":"UT_4SjjZmbPphZGKDq","UserEmail":"x.x@x.x","UserAccountStatus":"Active"},"URH_57vQr8MVXgpcPUo":{"DivisionID":"DV_XXXXXXXX","UserName":"jxxxx@xx.xxx","UserFirstName":"X","UserLastName":"X","UserAccountType":"UT_BRANDADMIN","UserEmail":"xxxx@xxg.xxx","UserAccountStatus":"Active"},"URH_6ujW1EP0QJOUaoI":{"DivisionID":"DV_XXXXXXXYZ","UserName":"x.xckx@xxx.xyz","UserFirstName":"x","UserLastName":"x","UserAccountType":"UT_XXXXXABCD","UserEmail":"c.c@cc.com","UserAccountStatus":"Active"}}}
Run Code Online (Sandbox Code Playgroud)
这是我使用json2csharp生成模型时得到的结果:
public class Meta
{
public string Status { get; set; }
public string Debug { get; set; }
}
public class URH3wpA9pxGbE0c7Xu
{
public object DivisionID { get; set; }
public string UserName { get; set; }
public string …Run Code Online (Sandbox Code Playgroud) 我正在尝试利用Polly处理任意结果条件的能力https://github.com/App-vNext/Polly/#step-1b-optionally-specify-return-results-you-want-to-处理。
在我的测试用例中,我使用RestSharp发出 HTTP 请求。这是我的示例代码:
var policy = Policy
.HandleResult<IRestResponse>(r => r.Content.Contains("bla"))
.Retry(2)
.ExecuteAndCapture(() =>
{
IRestClient client = new RestClient("https://httpbin.org/anything");
IRestRequest request = new RestRequest(Method.GET);
var response = client.Execute(request);
return response;
});
Run Code Online (Sandbox Code Playgroud)
对https://httpbin.org/anything的调用回响了一堆东西 - 确切的内容并不相关。正如您在谓词中看到的,我在结果正文中寻找字符串“bla”。
问题是,policy.Outcome是总是成功的(policy.Outcome == OutcomeType.Successful),但“喇嘛”是不是在结果身体。
我正在尝试在我的项目上实现第三方服务,我需要进行一些身份验证才能使用他们的API。
为此,我需要在其auth URL上执行POST请求,问题是当我执行请求时,他们的服务器发送带有302和Location标头的响应,现在是奇怪的部分:
我需要获取此位置链接并阅读查询字符串以获取所需的信息。
我已经尝试了所有我能想到的方法,即使Postman也不会使用它。
这是我的代码:
var client = new RestClient(APIBase + "/portal/rest/oauth2/login");
var request = new RestRequest(Method.POST);
request.AddHeader("content-type", "application/x-www-form-urlencoded");
request.AddHeader("cache-control", "no-cache");
request.AddParameter("application/x-www-form-urlencoded", $"user={User}&password={Password}&client_id={ClientId}", ParameterType.RequestBody);
var content = client.Execute(request);
Run Code Online (Sandbox Code Playgroud)
这是我在命令提示符下使用curl设法获得的响应头:
HTTP/1.1 302 Moved Temporarily
Date: Wed, 26 Jul 2017 17:59:32 GMT
Server: Apache-Coyote/1.1
Location: LOCATION-LINK
Content-Length: 0
HTTP/1.1 200 OK
Date: Wed, 26 Jul 2017 17:59:32 GMT
Server: Apache-Coyote/1.1
Accept-Ranges: bytes
ETag: W/"20095-1497998126000"
Last-Modified: Tue, 20 Jun 2017 22:35:26 GMT
Content-Type: text/html
Content-Length: 20095
Vary: Accept-Encoding
Run Code Online (Sandbox Code Playgroud)
可能吗 ?
我在发送带参数的请求时遇到问题。我有在 PHP 中发送请求的示例,但我不知道在 RestSharp 中它应该是什么样子:
如您所见,在示例中,参数被添加到私钥(我也做过),然后还有这个 CURLOPT_POSTFIELDS,其中也添加了参数。我尝试通过 AddParameter、AddBody、AddJsonBody 来做,但没有任何效果。当我将参数连接到私钥时,响应始终为空,如果我删除它,我会得到响应,但我的参数被忽略。
string data = "{\"Paging\":{\"per_page\":\"" + 10 + "\"}}";
RestClient client = new RestClient("api");
string header = "WMS " + publicKey + ":" + GetMd5Hash(privateKey + data);
IRestRequest request = new RestRequest("products", Method.GET);
request.AddHeader("Content-Type", "application/json; charset=utf-8");
request.AddHeader("Authorization", header);
request.AddHeader("Content-Length", data.Length.ToString());
//request.RequestFormat = RestSharp.DataFormat.Json;
request.AddParameter("Paging", new { per_page = 10 });
IRestResponse response = client.Execute(request);
Encoding encoding = Encoding.GetEncoding("utf-8");
var result = encoding.GetString(response.RawBytes);
Run Code Online (Sandbox Code Playgroud)
我能够使用 fiddler 跟踪 php 请求,原始请求如下所示:
获取 API HTTP/1.1 主持人:api 编译指示:无缓存 …
我一直在努力使用restsharp下载在线托管的简单pdf。我已经使用了一个多小时的代码,而我得到的只是空对象结果。
使用GET可以轻松地在POSTMAN中下载文件,而无需设置内容标头,但是还能提供什么呢?
以下是我一直在尝试的点头沙盒测试:
[TestFixture]
public class Sandbox
{
[Test]
public void Test()
{
var uri = "https://www.nlm.nih.gov/mesh/2018/download/2018NewMeShHeadings.pdf";
var client = new RestClient();
var request = new RestRequest(uri, Method.GET);
//request.AddHeader("Content-Type", "application/octet-stream");
byte[] response = client.DownloadData(request);
File.WriteAllBytes(@"C:\temp\1.pdf", response);
}
}
Run Code Online (Sandbox Code Playgroud)
更新:返回流
var baseUri = "https://www.nlm.nih.gov/mesh/2018/download/";
var client = new RestClient(baseUri);
var request = new RestRequest("2018NewMeShHeadings.pdf", Method.GET);
request.AddHeader("Content-Type", "application/octet-stream");
var tempFile = Path.GetTempFileName();
var stream = File.Create(tempFile, 1024, FileOptions.DeleteOnClose);
request.ResponseWriter = responseStream => responseStream.CopyTo(stream);
var response = client.DownloadData(request);
Run Code Online (Sandbox Code Playgroud)
现在,将使用下载的数据填充流。
我使用 RestSharp 访问服务器 API。
RestClient client = new RestClient(serverUrl);
JObject parameters = new JObject
{
new JProperty("Param1", p1),
new JProperty("Param2", p2)
};
RestRequest request = new RestRequest("/Foo", Method.POST);
request.AddParameter("application/json; charset=UTF-8", parameters, ParameterType.RequestBody);
Run Code Online (Sandbox Code Playgroud)
有没有办法在 RestSharp 中获取 REST 请求的原始 JSON 数据?