我对REST
的整个想法非常非常新,从一般情况下调用了一个来自http的API,但对于我正在开发的项目来说,它已经变得非常必要。在.NET中通过HttpClient传递参数时不清楚核心
我使用的是ASP.NET Core
,所以我一直在试图找到一个REST库。当我使用标准.NET
时,我可以使用RestSharp
,但社区制作的RestSharp.Core
已过时,并且与较新版本的.NET Standard 1.6+
存在许多不兼容问题。
为此,我已经探索了其他的选择,但是我的经验不足只会令人沮丧。不可避免的是,我认为如果我只是使用内置的HttpClient
课程是最好的。但我不确定如何为这种确切的情况做到这一点。我很难理解如何给请求提供参数,以及我在返回值中特别注意的内容。
我的需求很简单;
- 创建指定它是一个
POST
操作$url
- 的连接。
- 在发出请求时将现有的
JSON
对象传递给服务器。 - 得到
JSON
数据返回。
我的代码,使用旧的RestSharp.Core
,看起来有点像这样 - 显然是隐私的关键和这样的。
public async Task<string> OpenApiAsync() {
var token = await Task.Run(async() => {
var httpClient = new RestClient("https://[OMITTED].auth0.com/oauth/token");
var httpRequest = new RestRequest() {
Serializer = new RestSharp.Serializers.JsonSerializer(),
Method = Method.POST
};
httpRequest.AddHeader("content-type", "application/json");
httpRequest.AddJsonBody(new {
client_id = _settings.Value.ClientId,
client_secret = _settings.Value.ClientSecret,
audience = _settings.Value.Audience,
grant_type = _settings.Value.GrantType
});
var httpResponse = await httpClient.Execute(httpRequest);
var deserializer = new RestSharp.Deserializers.JsonDeserializer();
return deserializer.Deserialize<Dictionary<string, string>>(httpResponse);
});
return token["access_token"]);
}
的_settings
对象被注入IOptions<Auth0Settings>
,其具有这样的形状和一般的数据。
"authentication": {
"Domain": "[auth0-domain]",
"Audience": "https://[OMITTED].auth0.com/api/v2/",
"ClientId": "ABCDEFGHIJKLMNOP....",
"ClientSecret": "A22u5hgbnwifhwihfwi20u559f...",
"CallbackUrl": "http://localhost:5000/signin-auth0",
"GrantType": "client_credentials"
}
谁能帮助我了解如何可以被移植到原生HttpClient
是在.NET Standard 1.6+
?我特别需要一个与netstandard1.6
和netcoreapp1.1
兼容的驱动程序。
非常感谢您使用。这清除了很多,它让我放弃了一个相当沉重和不稳定的包的依赖! – Ciel
@Ciel关于'''HttpClient''的一件好事就是它是线程安全的。所以通常最好的做法是每个远程服务器使用一个'''HttpClient''' – 2017-02-22 04:49:15