すべてのプロダクト
Search
ドキュメントセンター

Direct Mail:C# SDK を使用して長いコンテンツを送信すると、「Invalid URI: The Uri string is too long」というエラーが発生する

最終更新日:Nov 09, 2025

問題のあるシナリオ

C# ソフトウェア開発キット (SDK) を使用して大量のコンテンツを送信すると、「Invalid URI: The Uri string is too long」というエラーが発生します。

解決策

Alibaba Cloud OpenAPI Explorer にログオンして、デバッグ用のコードを生成します。

[Generate code in common mode] を有効にし、パラメーターを指定します。

image

コードを取得したら、パラメーターの受け渡し方法を URL から Body に変更します。

次の図は、2 つの重要な変更点を示しています。

image

変更後のコード:

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;

using Tea;
using Tea.Utils;


namespace AlibabaCloud.SDK.Sample
{
    public class Sample
    {

        /**
         * AccessKey ペアを使用してクライアントを初期化します。
         * @return Client
         * @throws Exception
         */
        public static AlibabaCloud.OpenApiClient.Client CreateClient()
        {
            // コードを漏洩させると、AccessKey ペアが公開され、すべてのリソースのセキュリティが損なわれる可能性があります。次のサンプルコードは参照用です。
            // より安全なセキュリティトークンサービス (STS) メソッドを使用します。詳細については、以下の関連ドキュメントをご参照ください。
            AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
            {
                // 必須。ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認してください。
                AccessKeyId = "xxxxxx",
                // 必須。ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
                AccessKeySecret = "xxxxxx",
            };
            // エンドポイントの詳細については、関連ドキュメントをご参照ください。
            config.Endpoint = "dm.aliyuncs.com";
            return new AlibabaCloud.OpenApiClient.Client(config);
        }

        /**
         * API 関連情報
         * @param path params
         * @return OpenApi.Params
         */
        public static AlibabaCloud.OpenApiClient.Models.Params CreateApiInfo()
        {
            AlibabaCloud.OpenApiClient.Models.Params params_ = new AlibabaCloud.OpenApiClient.Models.Params
            {
                // API 操作の名前。
                Action = "SingleSendMail",
                // API 操作のバージョン。
                Version = "2015-11-23",
                // プロトコル。
                Protocol = "HTTPS",
                // HTTP メソッド。
                Method = "POST",
                AuthType = "AK",
                Style = "RPC",
                // API 操作のパス。
                Pathname = "/",
                // リクエストボディのフォーマット。
                ReqBodyType = "formdata",
                // 応答本文のフォーマット。
                BodyType = "json",
            };
            return params_;
        }

        public static void Main(string[] args)
        {
            AlibabaCloud.OpenApiClient.Client client = CreateClient();
            AlibabaCloud.OpenApiClient.Models.Params params_ = CreateApiInfo();
            // クエリパラメーター
            Dictionary<string, object> queries = new Dictionary<string, object>() { };
            queries["AccountName"] = "xxxxxx";
            queries["AddressType"] = 1;
            queries["ReplyToAddress"] = false;
            queries["ToAddress"] = "xxxxxx";
            queries["Subject"] = "test2";
            queries["HtmlBody"] = "test long content";
            // ランタイムオプション
            AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            AlibabaCloud.OpenApiClient.Models.OpenApiRequest request = new AlibabaCloud.OpenApiClient.Models.OpenApiRequest
            {
                Body = queries,
            };
            // コードをコピーして実行する際に、API 操作の戻り値を表示します。
            // 戻り値は Map 型です。Map からは、応答本文、応答ヘッダー、HTTP ステータスコードの 3 種類のデータを取得できます。
            client.CallApi(params_, request, runtime);
        }


    }
}

リファレンス:

アクセス資格情報の管理

サービスエンドポイント