This commit is contained in:
owenchen committed 2026-05-28 15:05:46 +08:00
1 parent e60118eb53
commit 2e990e687f
38 files changed
+441 -237

No files matched your search

@@ -39,6 +39,8 @@ namespace CloudBuilder.Core.Request
Task<R> PostAsync<R>(string api, MultipartFormDataContent data);
Task<Stream> PostStreamAsync<T>(string api, Dictionary<string, string> headers, T data);
void AddHeaders(string name, string? value);
void SetContext(IContext loginContext);
HttpClient GetHttpClient();
@@ -361,6 +361,56 @@ namespace CloudBuilder.Core.Request
if (completedCallback != null) completedCallback(filePath);
}
public async Task<Stream> PostStreamAsync<T>(string api, Dictionary<string, string> headers, T data)
{
if (headers != null && headers.Count > 0)
{
foreach (var header in headers)
{
if (request.DefaultRequestHeaders.Contains(header.Key)) request.DefaultRequestHeaders.Remove(header.Key);
request.DefaultRequestHeaders.Add(header.Key, header.Value);
}
}
this.request.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", loginContext.GetToken());
if (request.DefaultRequestHeaders.Contains(ClaimPolicy.HEADER_LOCALE))
request.DefaultRequestHeaders.Remove(ClaimPolicy.HEADER_LOCALE);
request.DefaultRequestHeaders.Add(ClaimPolicy.HEADER_LOCALE, loginContext.GetCulture());
var options = new JsonSerializerOptions
{
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull
};
try
{
var response = await this.request.PostAsJsonAsync(api, data, options).ConfigureAwait(false);
if (!response.IsSuccessStatusCode)
{
//{"errors":{},"type":"https://tools.ietf.org/html/rfc9110#section-15.5.1","title":"One or more validation errors occurred.","status":400,"traceId":"00-64ad066978f4471cb3c9ce219c213da9-bccca8afd14676b3-00"}
var responseContext = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
string errors = string.Empty;
if (responseContext != null && responseContext.StartsWith("{\"errors\"")) errors = responseContext.Substring(11, responseContext.IndexOf("}") - 11);
if (response.ReasonPhrase == "Forbidden")
throw new Exception(string.Format("{0}", CoreMessagePolicy.GetInstance().ComposeMessage(CoreMessagePolicy.NO_PERMISSION)));
throw new Exception(string.Format("{0}{1}", response.ReasonPhrase, string.IsNullOrEmpty(errors) ? "" : "\r\n" + errors));
}
response.EnsureSuccessStatusCode();
return await response.Content.ReadAsStreamAsync();
}
catch (Exception ex )
{
throw ex;
}
}
public async Task<R> PostAsync<R>(string api, MultipartFormDataContent data)
{