У меня есть два следующих метода:
private string Post(string url, ByteArrayContent content, AuthenticationToken token = null) {
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
using HttpClient client = new HttpClient();
if (token != null) {
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Access_token);
}
return client.PostAsync(url, content)
.Result.Content.ReadAsStringAsync()
.Result;
}
private string Put(string url, ByteArrayContent content, AuthenticationToken token) {
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
using HttpClient client = new HttpClient();
if (token != null) {
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Access_token);
}
return client.PutAsync(url, content)
.Result.Content.ReadAsStringAsync()
.Result;
}
Как видите, разница только в том, что один метод вызывает PostAsync
, а другой метод вызывает PutAsync
.
Можно ли написать одну функцию, например:
private string Send(string url, ByteArrayContent content, AuthenticationToken token, String functionName) {
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
using HttpClient client = new HttpClient();
if (token != null) {
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Access_token);
}
return client[sendFunction](url, content)
.Result.Content.ReadAsStringAsync()
.Result;
}
И тогда я смогу превратить каждую из других функций в один лайнер, например:
private string Post(string url, ByteArrayContent content, AuthenticationToken token = null) {
this.Send(url, content, token, "PostAsync");
}
. .. Было бы даже лучше, если бы я мог передать функцию или имя функции таким образом, чтобы это было типично.