我正在尝试使用 HttpClient 对 Web API 方法发出 PUT 请求。几乎相同的 POST 请求按预期工作,但 PUT 请求会导致 400(错误请求)错误。我不确定我做错了什么。
这是我的 Web API 控制器代码:
public HttpResponseMessage Post(object val)
{
Debug.WriteLine(val.ToString());
return new HttpResponseMessage(HttpStatusCode.OK);
}
public HttpResponseMessage Put(int id, object val)
{
Debug.WriteLine(id.ToString(), val.ToString());
return new HttpResponseMessage(HttpStatusCode.OK);
}
Run Code Online (Sandbox Code Playgroud)
这是尝试调用这些方法的客户端代码。POST 请求如下所示:
var client = new HttpClient();
var content = log.ToJsonContent();
var address = new Uri(_webApiBaseAddress + "logs");
client.PostAsync(address, content).ContinueWith(requestTask =>
{
requestTask.Result.EnsureSuccessStatusCode();
});
Run Code Online (Sandbox Code Playgroud)
不起作用的 PUT 请求如下所示:
var client = new HttpClient();
var content = log.ToJsonContent();
var address = new …Run Code Online (Sandbox Code Playgroud) c# restsharp http-status-code-400 asp.net-web-api dotnet-httpclient
如何使用 HTTP PUT 方法发送字节数组?AddFile类的方法RestRequest发送额外的标头。方法AddParameter采用一个Object类型。
我是怎么做的:
byte[] data;
using (var ms = new MemoryStream())
{
Serializer.Serialize(ms, query);
data = ms.ToArray();
ms.Close();
}
var client = new RestClient(ServerPath);
var request = new RestRequest(RequestPath, Method.PUT);
request.AddFile("stream", x => new MemoryStream(data), string.Empty);
client.ExecuteAsync(request, responce => Debug.WriteLine(responce.Content));
Run Code Online (Sandbox Code Playgroud)
但在服务器端我看到额外的标题
-------------------------------28947758029299 内容配置:表单数据;名称=“流”;filename="" Content-Type: application/octet-stream [RAW DATA HERE] -------------------------------28947758029299 ——
额外的标题使查询不可读。我做错了什么?
我必须调用 Restful API,但我拥有的唯一详细信息是 API ID 和 API 密钥。
我正在尝试使用像这样的 Restsharp 库代码。
var client = new RestClient("https://xxxxxxx");
client.Authenticator = new HttpBasicAuthenticator("xxxxx", "yyyyyy");
Run Code Online (Sandbox Code Playgroud)
我收到 401 需要授权错误。
你能指出我正确的方向吗?
谢谢。
好吧,我对使用 API 的理解有限
我试图掌握 Adobe Sign API 并遇到了死胡同,在那里的测试页面上我已经输入了这个并且它有效
但我不知道如何在 C# 中做到这一点
我已经尝试了以下方法,但知道它缺少 OAuth 的东西,我只是不确定接下来要尝试什么。顺便说一句 foo.GetAgreementCreationInfo() 只是获取屏幕截图中的字符串,我只是将其移出因为它又大又丑
var foo = new Models();
var client = new RestClient("https://api.na1.echosign.com/api/rest/v5");
// client.Authenticator = new HttpBasicAuthenticator(username, password);
var request = new RestRequest("agreements/{AgreementCreationInfo}", Method.POST);
request.AddParameter("name", "value"); // adds to POST or URL querystring based on Method
request.AddUrlSegment("AgreementCreationInfo", foo.GetAgreementCreationInfo()); // replaces matching token in request.Resource
IRestResponse response = client.Execute(request);
var content = response.Content; // raw content as string
Run Code Online (Sandbox Code Playgroud) 我正在使用RestSharp尝试使用Mailgun API发送附件.我尝试使用硬编码路径从系统中的文件附加,也使用(SQL Server)属性ToArray()上的方法从存储在数据库中的二进制文件附加,但varbinary(MAX)都没有成功.
附件在技术上发送,但当电子邮件到达我的收件箱时,文件大小总是大约302字节,并且总是损坏.我尝试了3个不同的文件,每次都遇到同样的问题.
电子邮件的其余部分发送,传递和显示正常.这只是被打破的附件.
代码细分:
// Doesnt work(Data property is varbinary(MAX)
request.AddFileBytes("attachment",databaseModel.Data.ToArray(),databaseModel.Filename, "multipart/form-data");
// Also doesnt work(Data property is varbinary(MAX)
request.AddFile("attachment",databaseModel.Data.ToArray(),databaseModel.Filename, "multipart/form-data");
// Also doesnt work
var path = @"D:\Template.pdf";
request.AddFile("attachment",path,"multipart/form-data");
Run Code Online (Sandbox Code Playgroud) 我正在使用RestSharp来POST以下内容:
POST API/storage
Content-Type: application/xml
<StorageDocument xmlns="http://xml.somename.com/schema/somename">
<type>LOCAL</type>
<method>
<uri>file:///path/to/files/</uri>
<read>true</read>
<write>true</write>
<browse>true</browse>
<type>NONE</type>
</method>
<autoDetect>true</autoDetect>
</StorageDocument>
Run Code Online (Sandbox Code Playgroud)
我的代码:
private void button2_Click(object sender, EventArgs e)
{
var client = new RestClient();
client.BaseUrl = new Uri(baseUrlString);
client.Authenticator = new HttpBasicAuthenticator("admin", "admin");
var request = new RestRequest("API/storage", Method.POST);
request.AddParameter ("Content-Type", "application/xml");
request.RequestFormat = DataFormat.Xml;
string xml =
"<StorageDocument xmlns=\"http://xml.somename.com/schema/somename\">" + Environment.NewLine +
"<type>LOCAL</type>" + Environment.NewLine +
"<method>" + Environment.NewLine +
"<uri>file:///path/to/files/</uri>" + Environment.NewLine +
"<read>true</read>" + Environment.NewLine +
"<write>true</write>" + Environment.NewLine +
"<browse>true</browse>" …Run Code Online (Sandbox Code Playgroud) 我使用 RestSharp 和IRestResponse<T> response = client.Execute<T>(request). 但是,一个特定的 JSON 结果给我带来了麻烦,它以方括号开头和结尾......
我的 JSON 以“[”和“]”字符开头和结尾:
[
{
"first": "Adam",
"last": "Buzzo"
},
{
"first": "Jeffrey",
"last": "Mosier"
}
]
Run Code Online (Sandbox Code Playgroud)
我创建了这个类结构:
public class Person
{
public string first { get; set; }
public string last { get; set; }
}
public class Persons
{
public List<Person> person { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我在方法中使用 RestSharp 动态反序列化为我的Persons类型 T...
IRestResponse<T> response = client.Execute<T>(request);
return response;
Run Code Online (Sandbox Code Playgroud)
问题是,当 T 是Persons时,我在客户端上收到此错误。执行行:
无法将“RestSharp.JsonArray”类型的对象转换为“System.Collections.Generic.IDictionary`2[System.String,System.Object]”类型。
我也尝试使用 Json.Net …
使用restsharp.org请求API很容易,但是当我需要调用两个不同的API时,第一个请求包含代码,在响应第二个开始后,我认为这是不正确的,下面是我的代码:
var client = new RestClient("http://xxx.yyy.com/");
var requestHotels = new RestRequest("api/hotelUi/home/hotelList", Method.POST);
requestHotels.AddParameter("take", "16");
IRestResponse hotels = client.Execute(requestHotels);
List<Hotel> topHotels = JsonConvert.DeserializeObject<List<Hotel>>(hotels.Content);
var requestCities = new RestRequest("api/hotelUi/home/cityList", Method.POST);
requestCities.AddParameter("take", "16");
IRestResponse cities = client.Execute(requestCities);
List<City> topCities = JsonConvert.DeserializeObject<List<City>>(cities.Content);
Run Code Online (Sandbox Code Playgroud)
正如你看到的城市请求等到酒店请求响应,但我认为它们都必须发送,并等到两个响应都回来。
我该怎么做?
我有一个控制台应用程序,它在以下位置的 docker 容器中打包了一个托管服务netcore 2.2:
FROM microsoft/dotnet:2.2-sdk AS builder
WORKDIR /service
# copy csproj and restore as distinct layers
COPY . .
RUN dotnet restore ./Project.sln
# copy everything else and build
COPY . .
RUN dotnet publish ./Project/Project.csproj -c Release -o /service/out
# build runtime image
FROM microsoft/dotnet:2.2.0-aspnetcore-runtime
WORKDIR /service
COPY --from=builder /service/out ./
ENV ASPNETCORE_ENVIRONMENT Production
ENTRYPOINT ["dotnet", "Project.dll"]
Run Code Online (Sandbox Code Playgroud)
我一直在使用RestSharp 106.6没有问题。然后今天我决定迁移到net core 3.1这样,除了成功更改所有项目中的程序集版本并成功运行控制台应用程序之外,我还修改了我的 Dockerfile:
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS builder
WORKDIR /service
# copy csproj …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 C# 中学习 JSON 和 webrequests,但遇到了这个问题:
键值对的值始终为 0。
JSON(来自这个 api):
"rates": {
"2020-08-03": { "JPY": 124.51 },
"2020-08-25": { "JPY": 125.67 },
"2019-11-20": { "JPY": 119.96 },
"2020-04-08": { "JPY": 118.36 }
},
"start_at": "2019-10-28",
"base": "EUR",
"end_at": "2020-10-28"
}
Run Code Online (Sandbox Code Playgroud)
转换.cs
public partial class ConversionRatesLastYear
{
[JsonProperty("rates")]
public Dictionary<string, Rate> Rates { get; set; }
[JsonProperty("start_at")]
public DateTimeOffset StartAt { get; set; }
[JsonProperty("base")]
public string Base { get; set; }
[JsonProperty("end_at")]
public DateTimeOffset EndAt { get; set; …Run Code Online (Sandbox Code Playgroud)