storage.worksmobile.com/openapi/message/upload.api をC# HttpClientで送るとレスポンスが来ない
事象は標題通りです。
コードのイメージとしては以下のような感じです。
事象としては、ほぼこちらの方と同じで、MultipartFormDataContentを使うとレスポンスが返って来ません。Fiddlerで見ると504(Send Failure) として表示されます。
https://forum.worksmobile.com/jp/posts/100148?scrollToCommentNo=100293Fiddlerで実際に送っているリクエストを見る限りは、Content-Type のboundary の前後に " が入っているから起こっているような気が致します。
例)multipart/form-data; boundary="fcb1f5c9-0c96-49c3-b711-17dbbc5d1b35"
↑boundary="mojiretsu" といった感じで、前後に " がある
上に貼ったリンクの方は WebRequest を使って凌いだ、と書いてありますが、私の認識が正しければWebRequestは古く、
一般的には HttpClient を使うべきという認識でして、できればHttpClientで行きたいと思っております。
如何すればよいかご存じの方いらっしゃるでしょうか。
using (var client = new HttpClient())
{
string test = await (await client.GetAsync(uploadUri)).Content.ReadAsStringAsync();
Debug.WriteLine($"TEST ============> {test}");
client.DefaultRequestHeaders.Add("authorization", $"Bearer {accessToken}");
client.DefaultRequestHeaders.Add("consumerKey", ConsumerKey);
var form = new MultipartFormDataContent();
form.Add(new ByteArrayContent(image, 0, image.Length), name, $"{imgName}.png");
Debug.WriteLine(JsonConvert.SerializeObject(form, Formatting.Indented));
try
{
result = await client.PostAsync(uploadUri, form);
}
catch (Exception e)
{
if (result != null) //result が null のため、Bodyを読もうとするとエラーになるので足した
{
Debug.WriteLine(JsonConvert.SerializeObject(result, Formatting.Indented));
Debug.WriteLine(await result.Content.ReadAsStringAsync());
}
Debug.WriteLine(JsonConvert.SerializeObject(e, Formatting.Indented));
throw;
}
}
投稿に新しいコメントが追加されましたら通知を送信します。
コメント2
업데이트 된 답글입니다.
LINE WORKS 公式アカウント
他のユーザ様の回答をお待ちいただくか、担当のパートナー営業にご相談ください。
2020.11.25
업데이트 된 답글입니다.
さ 投稿者
個別コード不可とのことですので、間にFiddlerを置き、実際にどのようなリクエストを送信しているかを取得いたしました。
コードから送信されるリクエストをなるべく成功例(POSTMAN)のリクエストに近づけてみたのですが、やはり接続が切られており皆目見当がつかないといった状態です。
以下にそれぞれのリクエストのパターンを送らせていただきます。
機密情報、一般に公開してはまずそうなものは適宜マスキングしています。
(マスキングしていないものは既に貴社カスタマーサポートに送付しております)
成功したパターン(POSTMAN)
POST https://storage.worksmobile.com/openapi/message/upload.api HTTP/1.1
Authorization: Bearer ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
consumerKey: ■■■■■■■■■
x-works-apiid: ■■■■■■■■■
Connection: Keep-Alive
Host: storage.worksmobile.com
Content-Type: multipart/form-data; boundary=--------------------------784972608659336993014829
Content-Length: 16164
----------------------------784972608659336993014829
Content-Disposition: form-data; name="resourceName"; filename="green.png"
Content-Type: image/png
//・・・画像データ
----------------------------784972608659336993014829--
HTTP/1.1 200 OK
Keep-Alive: timeout=20, max=100000
Connection: Keep-Alive
Server: FileCloud
Content-Type: application/json;charset=UTF-8
ETag: 1606371258
x-works-resource-id: ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
Content-Length: 155
{
"code":0,
"message":"success",
"result":{
"accessKey":"",
"resourceCid":"■■■■■■■■■■■■■■■■■■",
"resourceSize":■■■■■■■■■,
"streamLength":■■■■■■■■■
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
失敗したパターン(Webrequest)
POST https://storage.worksmobile.com/openapi/message/upload.api HTTP/1.1
Authorization: Bearer ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
consumerKey: ■■■■■■■■■
x-works-apiid: ■■■■■■■■■
Host: storage.worksmobile.com
Connection: Keep-Alive
Content-Type: multipart/form-data; boundary=---------------------------8d8921e06479175
Content-Length: 16150
-----------------------------8d8921e06479175
Content-Disposition: form-data; name="resourceName"; filename="green.png"
Content-Type: image/png
//・・・画像データ
-----------------------------8d8921e06479175--
HTTP/1.1 504 Fiddler - Receive Failure
Date: Thu, 26 Nov 2020 06:14:53 GMT
Content-Type: text/html; charset=UTF-8
Connection: close
Cache-Control: no-cache, must-revalidate
Timestamp: 15:14:53.092
[Fiddler] ReadResponse() failed: The server did not return a complete response for this request. Server returned 0 bytes.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
失敗したパターン(HttpClient)
POST https://storage.worksmobile.com/openapi/message/upload.api HTTP/1.1
Authorization: Bearer ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
consumerKey: ■■■■■■■■■
x-works-apiid: ■■■■■■■■■
Host: storage.worksmobile.com
Content-Type: multipart/form-data; boundary="44b06115-c0cf-480d-966a-6b15b3769d2a"
Content-Length: 16164
--44b06115-c0cf-480d-966a-6b15b3769d2a
Content-Type: image/png
Content-Disposition: form-data; name=resourceName; filename=tekitou.png; filename*=utf-8''tekitou.png
--44b06115-c0cf-480d-966a-6b15b3769d2a--
HTTP/1.1 504 Fiddler - Receive Failure
Date: Thu, 26 Nov 2020 06:14:57 GMT
Content-Type: text/html; charset=UTF-8
Connection: close
Cache-Control: no-cache, must-revalidate
Timestamp: 15:14:57.877
[Fiddler] ReadResponse() failed: The server did not return a complete response for this request. Server returned 0 bytes.
2020.11.27
まだ、解決できませんか?
今すぐ実際に使用しているLINE WORKSユーザーに質問してみましょう。