コミュニティ

LINE WORKSのテクニカルエキスパート及び開発者と
コードのサンプル、リソース、Tip等を共有し問題解決への相談が可能です。

??dev_메인_타이틀_모바일_ja_JP??

問い合わせ

storage.worksmobile.com/openapi/message/upload.api  をC# HttpClientで送るとレスポンスが来ない

2020.11.20既読 117

事象は標題通りです。

コードのイメージとしては以下のような感じです。

事象としては、ほぼこちらの方と同じで、MultipartFormDataContentを使うとレスポンスが返って来ません。Fiddlerで見ると504(Send Failure) として表示されます。

https://forum.worksmobile.com/jp/posts/100148?scrollToCommentNo=100293
Fiddlerで実際に送っているリクエストを見る限りは、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

    0
  • 投稿者

    【チケット番号:00104498】

    個別コード不可とのことですので、間に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

    0
前の投稿 LINE WORKSをIdPとしたSAML2 SSOの際のスマートフォンアプリによる認証情報の提供の可否 / SSO URLにアクセスした際の404エラー
次の投稿SSOリダイレクトURLが違う