最近工作發現同事很愛把Log往DC去送,於是我也小研究了一下,發現還真的不難。

這邊假設有一個Job要每天送文字檔檔到DC的某頻道,下列程式碼是先產出檔案。

string filePath = $"text-{Guid.NewGuid().ToString()}.txt";
StreamWriter outputFile = new StreamWriter(filePath);
outputFile.Write(DateTime.Now.ToString());
outputFile.Close();

接下來就只是使用HttpClient

using var client = new HttpClient();
using var multipartContent = new MultipartFormDataContent();

// text content
multipartContent.Add(new StringContent("this is message"), "content");

// add a file
var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
var fileContent = new StreamContent(fileStream);
//https://www.runoob.com/http/http-content-type.html
fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse("text/plain");
multipartContent.Add(fileContent, "file", Path.GetFileName(filePath));

最後就只是透過HttpClient把Request送到DC的WebHook URL。

try
{
    var response = await client.PostAsync(webhookUrl, multipartContent);
    string responseContent = string.Empty;
    if (response.IsSuccessStatusCode)
    {
        responseContent = await response.Content.ReadAsStringAsync();
    }
    else
    {
        Console.WriteLine($"發送失敗,狀態碼: {response.StatusCode}");
        Console.WriteLine(await response.Content.ReadAsStringAsync());
    }
}
catch (Exception ex)
{
    Console.WriteLine($"發送失敗: {ex.Message}");
}