refactor(wxads)

This commit is contained in:
Fu Diwei 2021-07-11 00:55:05 +08:00
parent 6b31956d2a
commit b59462b4d4
18 changed files with 121 additions and 143 deletions

View File

@ -1,26 +0,0 @@
using System;
using Flurl.Http;
namespace SKIT.FlurlHttpClient.Wechat.Ads
{
internal static class FlurlHttpRequestOptionsExtensions
{
public static IFlurlRequest SetOptions(this IFlurlRequest request, WechatAdsRequest options)
{
if (request == null) throw new ArgumentNullException(nameof(request));
if (options == null) throw new ArgumentNullException(nameof(options));
if (options.Timeout.HasValue)
{
request.WithTimeout(TimeSpan.FromMilliseconds(options.Timeout.Value));
}
if (!string.IsNullOrEmpty(options.Version))
{
request.SetQueryParam("version", options.Version);
}
return request;
}
}
}

View File

@ -25,8 +25,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateRequest(HttpMethod.Post, "adcreatives", "add")
.SetOptions(request)
.CreateRequest(request, HttpMethod.Post, "adcreatives", "add")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestWithJsonAsync<Models.AdCreativesAddResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
@ -45,8 +44,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateRequest(HttpMethod.Post, "adcreatives", "update")
.SetOptions(request)
.CreateRequest(request, HttpMethod.Post, "adcreatives", "update")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestWithJsonAsync<Models.AdCreativesUpdateResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
@ -65,8 +63,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateRequest(HttpMethod.Get, "adcreatives", "get")
.SetOptions(request)
.CreateRequest(request, HttpMethod.Get, "adcreatives", "get")
.SetQueryParam("access_token", request.AccessToken);
if (request.AdCreativeId.HasValue)
@ -81,7 +78,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request.Page.HasValue)
flurlReq.SetQueryParam("page", request.Page.Value);
return await client.SendRequestAsync<Models.AdCreativesGetResponse>(flurlReq, cancellationToken: cancellationToken);
return await client.SendRequestWithJsonAsync<Models.AdCreativesGetResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
}
}

View File

@ -25,8 +25,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateRequest(HttpMethod.Post, "adgroups", "add")
.SetOptions(request)
.CreateRequest(request, HttpMethod.Post, "adgroups", "add")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestWithJsonAsync<Models.AdGroupsAddResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
@ -45,8 +44,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateRequest(HttpMethod.Post, "adgroups", "update")
.SetOptions(request)
.CreateRequest(request, HttpMethod.Post, "adgroups", "update")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestWithJsonAsync<Models.AdGroupsUpdateResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
@ -65,8 +63,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateRequest(HttpMethod.Get, "adgroups", "get")
.SetOptions(request)
.CreateRequest(request, HttpMethod.Get, "adgroups", "get")
.SetQueryParam("access_token", request.AccessToken);
if (request.AdGroupId.HasValue)
@ -81,7 +78,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request.Page.HasValue)
flurlReq.SetQueryParam("page", request.Page.Value);
return await client.SendRequestAsync<Models.AdGroupsGetResponse>(flurlReq, cancellationToken: cancellationToken);
return await client.SendRequestWithJsonAsync<Models.AdGroupsGetResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
@ -97,8 +94,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateRequest(HttpMethod.Post, "adgroups", "delete")
.SetOptions(request)
.CreateRequest(request, HttpMethod.Post, "adgroups", "delete")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestWithJsonAsync<Models.AdGroupsDeleteResponse>(flurlReq, data: request, cancellationToken: cancellationToken);

View File

@ -25,8 +25,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateRequest(HttpMethod.Post, "ads", "add")
.SetOptions(request)
.CreateRequest(request, HttpMethod.Post, "ads", "add")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestWithJsonAsync<Models.AdsAddResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
@ -45,8 +44,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateRequest(HttpMethod.Post, "ads", "update")
.SetOptions(request)
.CreateRequest(request, HttpMethod.Post, "ads", "update")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestWithJsonAsync<Models.AdsUpdateResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
@ -65,8 +63,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateRequest(HttpMethod.Get, "ads", "get")
.SetOptions(request)
.CreateRequest(request, HttpMethod.Get, "ads", "get")
.SetQueryParam("access_token", request.AccessToken);
if (request.AdId.HasValue)
@ -81,7 +78,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request.Page.HasValue)
flurlReq.SetQueryParam("page", request.Page.Value);
return await client.SendRequestAsync<Models.AdsGetResponse>(flurlReq, cancellationToken: cancellationToken);
return await client.SendRequestWithJsonAsync<Models.AdsGetResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
@ -97,8 +94,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateRequest(HttpMethod.Post, "ads", "delete")
.SetOptions(request)
.CreateRequest(request, HttpMethod.Post, "ads", "delete")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestWithJsonAsync<Models.AdsDeleteResponse>(flurlReq, data: request, cancellationToken: cancellationToken);

View File

@ -24,8 +24,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateRequest(HttpMethod.Post, "advertiser", "add")
.SetOptions(request)
.CreateRequest(request, HttpMethod.Post, "advertiser", "add")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestWithJsonAsync<Models.AdvertiserAddResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
@ -44,8 +43,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateRequest(HttpMethod.Post, "advertiser", "update")
.SetOptions(request)
.CreateRequest(request, HttpMethod.Post, "advertiser", "update")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestWithJsonAsync<Models.AdvertiserUpdateResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
@ -64,11 +62,10 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateRequest(HttpMethod.Get, "advertiser", "get")
.SetOptions(request)
.CreateRequest(request, HttpMethod.Get, "advertiser", "get")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestAsync<Models.AdvertiserGetResponse>(flurlReq, cancellationToken: cancellationToken);
return await client.SendRequestWithJsonAsync<Models.AdvertiserGetResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
}
}

View File

@ -25,8 +25,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateRequest(HttpMethod.Post, "async_tasks", "add")
.SetOptions(request)
.CreateRequest(request, HttpMethod.Post, "async_tasks", "add")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestWithJsonAsync<Models.AsyncTasksAddResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
@ -45,8 +44,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateRequest(HttpMethod.Get, "async_tasks", "get")
.SetOptions(request)
.CreateRequest(request, HttpMethod.Get, "async_tasks", "get")
.SetQueryParam("access_token", request.AccessToken);
if (request.Filters != null && request.Filters.Any())
@ -58,7 +56,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request.Page.HasValue)
flurlReq.SetQueryParam("page", request.Page.Value);
return await client.SendRequestAsync<Models.AsyncTasksGetResponse>(flurlReq, cancellationToken: cancellationToken);
return await client.SendRequestWithJsonAsync<Models.AsyncTasksGetResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
#region Files
@ -75,13 +73,12 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateRequest(HttpMethod.Get, "async_task_files", "get")
.SetOptions(request)
.CreateRequest(request, HttpMethod.Get, "async_task_files", "get")
.SetQueryParam("access_token", request.AccessToken)
.SetQueryParam("task_id", request.TaskId)
.SetQueryParam("file_id", request.FileId);
return await client.SendRequestAsync<Models.AsyncTaskFilesGetResponse>(flurlReq, cancellationToken: cancellationToken);
return await client.SendRequestWithJsonAsync<Models.AsyncTaskFilesGetResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
#endregion
}

View File

@ -25,8 +25,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateRequest(HttpMethod.Post, "campaigns", "add")
.SetOptions(request)
.CreateRequest(request, HttpMethod.Post, "campaigns", "add")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestWithJsonAsync<Models.CampaignsAddResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
@ -45,8 +44,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateRequest(HttpMethod.Post, "campaigns", "update")
.SetOptions(request)
.CreateRequest(request, HttpMethod.Post, "campaigns", "update")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestWithJsonAsync<Models.CampaignsUpdateResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
@ -65,8 +63,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateRequest(HttpMethod.Get, "campaigns", "get")
.SetOptions(request)
.CreateRequest(request, HttpMethod.Get, "campaigns", "get")
.SetQueryParam("access_token", request.AccessToken);
if (request.CampaignId.HasValue)
@ -81,7 +78,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request.Page.HasValue)
flurlReq.SetQueryParam("page", request.Page.Value);
return await client.SendRequestAsync<Models.CampaignsGetResponse>(flurlReq, cancellationToken: cancellationToken);
return await client.SendRequestWithJsonAsync<Models.CampaignsGetResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
}
}

View File

@ -24,8 +24,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateRequest(HttpMethod.Get, "credit_bills", "get")
.SetOptions(request)
.CreateRequest(request, HttpMethod.Get, "credit_bills", "get")
.SetQueryParam("access_token", request.AccessToken)
.SetQueryParam("bill_year", request.BillYear)
.SetQueryParam("bill_month", request.BillMonth);
@ -36,7 +35,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request.Page.HasValue)
flurlReq.SetQueryParam("page", request.Page.Value);
return await client.SendRequestAsync<Models.CreditBillsGetResponse>(flurlReq, cancellationToken: cancellationToken);
return await client.SendRequestWithJsonAsync<Models.CreditBillsGetResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
}
}

View File

@ -26,8 +26,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateRequest(HttpMethod.Post, "custom_audiences", "add")
.SetOptions(request)
.CreateRequest(request, HttpMethod.Post, "custom_audiences", "add")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestWithJsonAsync<Models.CustomAudiencesAddResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
@ -46,8 +45,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateRequest(HttpMethod.Post, "custom_audiences", "update")
.SetOptions(request)
.CreateRequest(request, HttpMethod.Post, "custom_audiences", "update")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestWithJsonAsync<Models.CustomAudiencesUpdateResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
@ -66,8 +64,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateRequest(HttpMethod.Get, "custom_audiences", "get")
.SetOptions(request)
.CreateRequest(request, HttpMethod.Get, "custom_audiences", "get")
.SetQueryParam("access_token", request.AccessToken);
if (request.CustomAudienceId.HasValue)
@ -79,7 +76,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request.Page.HasValue)
flurlReq.SetQueryParam("page", request.Page.Value);
return await client.SendRequestAsync<Models.CustomAudiencesGetResponse>(flurlReq, cancellationToken: cancellationToken);
return await client.SendRequestWithJsonAsync<Models.CustomAudiencesGetResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
#region Files
@ -102,16 +99,15 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
httpContent.Add(new StringContent(request.CustomAudienceId.ToString()), "audience_id");
httpContent.Add(new StringContent(request.UserIdType), "user_id_type");
httpContent.Add(new StringContent(request.OperationType), "operation_type");
httpContent.Add(fileContent, "\"file\"", "\"" + filename + "\"");
httpContent.Add(fileContent, "\"file\"", $"\"{filename}\"");
httpContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data; boundary=" + boundary);
fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/zip");
fileContent.Headers.ContentLength = request.FileBytes?.Length ?? 0;
fileContent.Headers.ContentLength = request.FileBytes?.Length;
IFlurlRequest flurlReq = client
.CreateRequest(HttpMethod.Post, "custom_audience_files", "add")
.SetOptions(request)
.CreateRequest(request, HttpMethod.Post, "custom_audience_files", "add")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestAsync<Models.CustomAudienceFilesAddResponse>(flurlReq, content: httpContent, cancellationToken: cancellationToken);
return await client.SendRequestAsync<Models.CustomAudienceFilesAddResponse>(flurlReq, httpContent: httpContent, cancellationToken: cancellationToken);
}
/// <summary>
@ -127,8 +123,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateRequest(HttpMethod.Get, "custom_audience_files", "get")
.SetOptions(request)
.CreateRequest(request, HttpMethod.Get, "custom_audience_files", "get")
.SetQueryParam("access_token", request.AccessToken);
if (request.CustomAudienceId.HasValue)
@ -143,7 +138,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request.Page.HasValue)
flurlReq.SetQueryParam("page", request.Page.Value);
return await client.SendRequestAsync<Models.CustomAudienceFilesGetResponse>(flurlReq, cancellationToken: cancellationToken);
return await client.SendRequestWithJsonAsync<Models.CustomAudienceFilesGetResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
#endregion
}

View File

@ -25,8 +25,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateRequest(HttpMethod.Post, "estimation", "get")
.SetOptions(request)
.CreateRequest(request, HttpMethod.Post, "estimation", "get")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestWithJsonAsync<Models.EstimationGetResponse>(flurlReq, data: request, cancellationToken: cancellationToken);

View File

@ -24,8 +24,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateRequest(HttpMethod.Post, "fund_transfer", "add")
.SetOptions(request)
.CreateRequest(request, HttpMethod.Post, "fund_transfer", "add")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestWithJsonAsync<Models.FundTransferAddResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
@ -44,11 +43,10 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateRequest(HttpMethod.Get, "funds", "get")
.SetOptions(request)
.CreateRequest(request, HttpMethod.Get, "funds", "get")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestAsync<Models.FundsGetResponse>(flurlReq, cancellationToken: cancellationToken);
return await client.SendRequestWithJsonAsync<Models.FundsGetResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
@ -64,8 +62,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateRequest(HttpMethod.Get, "fund_statements_detailed", "get")
.SetOptions(request)
.CreateRequest(request, HttpMethod.Get, "fund_statements_detailed", "get")
.SetQueryParam("access_token", request.AccessToken);
if (request.DateRange != null)
@ -80,7 +77,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request.Page.HasValue)
flurlReq.SetQueryParam("page", request.Page.Value);
return await client.SendRequestAsync<Models.FundStatementsDetailedGetResponse>(flurlReq, cancellationToken: cancellationToken);
return await client.SendRequestWithJsonAsync<Models.FundStatementsDetailedGetResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
}
}

View File

@ -33,16 +33,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (string.IsNullOrEmpty(request.FileContentType))
{
if (request.FileName!.EndsWith(".swf", StringComparison.OrdinalIgnoreCase))
request.FileContentType = "application/x-shockwave-flash";
else if (request.FileName!.EndsWith(".jpg", StringComparison.OrdinalIgnoreCase))
request.FileContentType = "image/jpeg";
else if (request.FileName!.EndsWith(".jpeg", StringComparison.OrdinalIgnoreCase))
request.FileContentType = "image/jpeg";
else if (request.FileName!.EndsWith(".gif", StringComparison.OrdinalIgnoreCase))
request.FileContentType = "image/gif";
else
request.FileContentType = "image/png";
request.FileContentType = Utilities.FileNameToContentTypeMapper.GetContentTypeForImage(request.FileName!) ?? "image/png";
}
if (string.IsNullOrEmpty(request.FileHash))
@ -53,16 +44,15 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
string boundary = "--BOUNDARY--" + DateTimeOffset.Now.Ticks.ToString("x");
using var fileContent = new ByteArrayContent(request.FileBytes ?? new byte[0]);
using var httpContent = new MultipartFormDataContent(boundary);
httpContent.Add(fileContent, "\"file\"", "\"" + HttpUtility.UrlEncode(request.FileName) + "\"");
httpContent.Add(fileContent, "\"file\"", $"\"{HttpUtility.UrlEncode(request.FileName)}\"");
httpContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data; boundary=" + boundary);
fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse(request.FileContentType);
fileContent.Headers.ContentLength = request.FileBytes?.Length ?? 0;
fileContent.Headers.ContentLength = request.FileBytes?.Length;
IFlurlRequest flurlReq = client
.CreateRequest(HttpMethod.Post, "images", "add")
.SetOptions(request)
.CreateRequest(request, HttpMethod.Post, "images", "add")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestAsync<Models.ImagesAddResponse>(flurlReq, content: httpContent, cancellationToken: cancellationToken);
return await client.SendRequestAsync<Models.ImagesAddResponse>(flurlReq, httpContent: httpContent, cancellationToken: cancellationToken);
}
/// <summary>
@ -78,8 +68,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateRequest(HttpMethod.Get, "images", "get")
.SetOptions(request)
.CreateRequest(request, HttpMethod.Get, "images", "get")
.SetQueryParam("access_token", request.AccessToken);
if (!string.IsNullOrEmpty(request.ImageId))
@ -94,7 +83,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request.Page.HasValue)
flurlReq.SetQueryParam("page", request.Page.Value);
return await client.SendRequestAsync<Models.ImagesGetResponse>(flurlReq, cancellationToken: cancellationToken);
return await client.SendRequestWithJsonAsync<Models.ImagesGetResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
}
}

View File

@ -24,8 +24,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateRequest(HttpMethod.Post, "qualifications", "add")
.SetOptions(request)
.CreateRequest(request, HttpMethod.Post, "qualifications", "add")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestWithJsonAsync<Models.QualificationsAddResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
@ -44,11 +43,10 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateRequest(HttpMethod.Get, "qualifications", "get")
.SetOptions(request)
.CreateRequest(request, HttpMethod.Get, "qualifications", "get")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestAsync<Models.QualificationsGetResponse>(flurlReq, cancellationToken: cancellationToken);
return await client.SendRequestWithJsonAsync<Models.QualificationsGetResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
@ -64,8 +62,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateRequest(HttpMethod.Post, "qualifications", "delete")
.SetOptions(request)
.CreateRequest(request, HttpMethod.Post, "qualifications", "delete")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestWithJsonAsync<Models.QualificationsDeleteResponse>(flurlReq, data: request, cancellationToken: cancellationToken);

View File

@ -25,8 +25,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateRequest(HttpMethod.Get, "daily_reports", "get")
.SetOptions(request)
.CreateRequest(request, HttpMethod.Get, "daily_reports", "get")
.SetQueryParam("access_token", request.AccessToken);
if (request.DateRange != null)
@ -44,7 +43,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request.Page.HasValue)
flurlReq.SetQueryParam("page", request.Page.Value);
return await client.SendRequestAsync<Models.DailyReportsGetResponse>(flurlReq, cancellationToken: cancellationToken);
return await client.SendRequestWithJsonAsync<Models.DailyReportsGetResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
@ -60,8 +59,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateRequest(HttpMethod.Get, "realtime_cost", "get")
.SetOptions(request)
.CreateRequest(request, HttpMethod.Get, "realtime_cost", "get")
.SetQueryParam("access_token", request.AccessToken)
.SetQueryParam("date", request.DateString)
.SetQueryParam("level", request.Level);
@ -69,7 +67,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request.Filters != null && request.Filters.Any())
flurlReq.SetQueryParam("filtering", client.FlurlJsonSerializer.Serialize(request.Filters));
return await client.SendRequestAsync<Models.RealtimeCostGetResponse>(flurlReq, cancellationToken: cancellationToken);
return await client.SendRequestWithJsonAsync<Models.RealtimeCostGetResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
}
}

View File

@ -24,8 +24,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateRequest(HttpMethod.Post, "sp_entrustment", "add")
.SetOptions(request)
.CreateRequest(request, HttpMethod.Post, "sp_entrustment", "add")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestWithJsonAsync<Models.SpEntrustmentAddResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
@ -44,11 +43,10 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateRequest(HttpMethod.Get, "sp_entrustment", "get")
.SetOptions(request)
.CreateRequest(request, HttpMethod.Get, "sp_entrustment", "get")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestAsync<Models.SpEntrustmentGetResponse>(flurlReq, cancellationToken: cancellationToken);
return await client.SendRequestWithJsonAsync<Models.SpEntrustmentGetResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
}
}

View File

@ -25,12 +25,11 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateRequest(HttpMethod.Get, "targeting_tags", "get")
.SetOptions(request)
.CreateRequest(request, HttpMethod.Get, "targeting_tags", "get")
.SetQueryParam("access_token", request.AccessToken)
.SetQueryParam("type", request.TagType);
return await client.SendRequestAsync<Models.TargetingTagsGetResponse>(flurlReq, cancellationToken: cancellationToken);
return await client.SendRequestWithJsonAsync<Models.TargetingTagsGetResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
}
}

View File

@ -0,0 +1,29 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace SKIT.FlurlHttpClient.Wechat.Ads.Utilities
{
internal static class FileNameToContentTypeMapper
{
public static string? GetContentTypeForImage(string fileName)
{
string extension = Path.GetExtension(fileName ?? "/")?.ToLower() ?? string.Empty;
switch (extension)
{
case ".swf":
return "application/x-shockwave-flash";
case ".jpg":
case ".jpeg":
return "image/jpeg";
case ".gif":
return "image/gif";
case ".png":
return "image/png";
}
return null;
}
}
}

View File

@ -73,20 +73,44 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads
{
}
/// <summary>
/// 使用当前客户端生成一个新的 <see cref="IFlurlRequest"/> 对象。
/// </summary>
/// <param name="request"></param>
/// <param name="method"></param>
/// <param name="urlSegments"></param>
/// <returns></returns>
public IFlurlRequest CreateRequest(WechatAdsRequest request, HttpMethod method, params object[] urlSegments)
{
IFlurlRequest flurlRequest = FlurlClient.Request(urlSegments).WithVerb(method);
if (request.Timeout.HasValue)
{
flurlRequest.WithTimeout(TimeSpan.FromMilliseconds(request.Timeout.Value));
}
if (!string.IsNullOrEmpty(request.Version))
{
flurlRequest.SetQueryParam("version", request.Version);
}
return flurlRequest;
}
/// <summary>
/// 异步发起请求。
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="flurlRequest"></param>
/// <param name="content"></param>
/// <param name="httpContent"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public async Task<T> SendRequestAsync<T>(IFlurlRequest flurlRequest, HttpContent? content = null, CancellationToken cancellationToken = default)
public async Task<T> SendRequestAsync<T>(IFlurlRequest flurlRequest, HttpContent? httpContent = null, CancellationToken cancellationToken = default)
where T : WechatAdsResponse, new()
{
try
{
using IFlurlResponse flurlResponse = await base.SendRequestAsync(flurlRequest, content, cancellationToken).ConfigureAwait(false);
using IFlurlResponse flurlResponse = await base.SendRequestAsync(flurlRequest, httpContent, cancellationToken).ConfigureAwait(false);
return await GetResposneAsync<T>(flurlResponse).ConfigureAwait(false);
}
catch (FlurlHttpException ex)