所有:
在向Web服务发送请求之前,我需要将http标头添加到HttpClient.我如何为单个请求执行此操作(而不是将HttpClient应用于所有将来的请求)?我不确定这是否可行.
var client = new HttpClient();
var task =
client.GetAsync("http://www.someURI.com")
.ContinueWith((taskwithmsg) =>
{
var response = taskwithmsg.Result;
var jsonTask = response.Content.ReadAsAsync<JsonObject>();
jsonTask.Wait();
var jsonObject = jsonTask.Result;
});
task.Wait();
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 ASP.Net Core 6 设置一个 Web api,以便用户可以到达我的端点,然后我使用特权帐户在幕后的 D365 中执行一些工作。我正在使用类型化的 HTTP 客户端,但我不确定如何插入承载身份验证,以便来自该客户端的所有请求都附加正确的授权标头。
程序.cs
builder.Services.AddHttpClient<D365Service>();
Run Code Online (Sandbox Code Playgroud)
D365Service.cs
private readonly HttpClient httpClient;
public D365Service(HttpClient httpClient)
{
this.httpClient = httpClient;
this.httpClient.DefaultRequestHeaders.Add("Accept", "*/*");
this.httpClient.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate, br");
// a whole bunch of other headers
// Is this where I can add in the bearer Authorization header? How do I generate that token?
}
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏。谢谢。
我试图通过C#(.NET Core 2.2.104)向主体中的外部Web服务发出带有application / json的HTTP POST请求。
我已经阅读了SO中的所有类似问题,并编写了以下代码:
SignXmlRequestDto requestBody = new SignXmlRequestDto(p12, model.SignCertPin, model.Data);
string json = JsonConvert.SerializeObject(requestBody);
var httpRequestMessage = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = ncanNodeUrl,
Headers =
{
{ HttpRequestHeader.ContentType.ToString(), "application/json" }
},
Content = new StringContent(JsonConvert.SerializeObject(json))
};
var response = await httpClient.SendAsync(httpRequestMessage);
string responseString = await response.Content.ReadAsStringAsync();
Run Code Online (Sandbox Code Playgroud)
我从服务中收到一个错误,它说:“无效的标头Content-Type。请将Content-Type设置为application / json”。在这里有趣的是,如果我模拟了来自Postman的请求,那么一切正常,我得到了成功的响应。
更新:按照@KristófTóth的建议,我将代码修改为:
var httpRequestMessage = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = ncanNodeUrl,
Content = new StringContent(json, Encoding.UTF8, "application/json")
};
var response …Run Code Online (Sandbox Code Playgroud)