コード例 #1
0
        /// <summary>
        /// 引数(<paramref name="request"/>)に紐づくレスポンスデータ情報を取得する
        /// </summary>
        /// <param name="request">HTTPリクエスト</param>
        /// <exception cref="ArgumentNullException">
        /// 引数の <paramref name="request"/> がNULLの場合に発生
        /// </exception>
        /// <exception cref="RegexMatchTimeoutException">
        /// 正規表現のマッチング処理にてタイムアウトが発生した場合に発生
        /// </exception>
        /// <returns>レスポンスデータ情報</returns>
        private HttpResponseData GetTargetResponseData(HttpListenerRequest request)
        {
            // NULLチェック
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            // favicon.iconのリクエストかチェック
            if (request.HttpMethod.Equals(
                    HttpMethod.Get.ToString(), StringComparison.OrdinalIgnoreCase) &&
                request.RawUrl.Equals(
                    LocalHttpServerResponseSetting.FaviconUrl, StringComparison.OrdinalIgnoreCase))
            {
                // favicon.iconのリクエストの場合は、それfavicon.icon用のレスポンスデータ情報を返却
                return(Setting?.FaviconResponse ?? LocalHttpServerCommon.EmptyDataResponse);
            }

            // HttpMethod、URLに紐づくレスポンスデータ情報を取得
            LocalHttpServerResponceProcess responceProcess
                = Setting?.Find(request.HttpMethod, request.RawUrl);

            // 取得したレスポンスデータ情報を返却
            // 取得できなかった場合はデフォルト用のレスポンスデータ情報を返却
            HttpResponseData defaultProcess
                = Setting?.DefaultResponse ?? LocalHttpServerCommon.EmptyDataResponse;

            return(responceProcess?.ResponseData ?? defaultProcess);
        }
コード例 #2
0
 /// <summary>
 /// コンストラクタ
 /// 引数の情報でHttpレスポンスの処理設定の初期化を行う
 /// </summary>
 /// <param name="defaultProcess">
 /// デフォルトで呼び出されるHttpレスポンスの処理の情報を格納したクラス
 /// (NULLを指定した場合は0byteのデータを返却する機能を持つクラスを設定)
 /// </param>
 /// <param name="faviconProcess">
 /// GET favicon.icoのリクエスト処理で呼び出されるHttpレスポンスの処理の情報を格納したクラス
 /// (NULLを指定した場合は0byteのデータを返却する機能を持つクラスを設定)
 /// </param>
 /// <param name="responceProcesses">
 /// Httpレスポンスの処理のクラスの配列
 /// </param>
 public LocalHttpServer(
     HttpResponseData defaultProcess,
     HttpResponseData faviconProcess,
     params LocalHttpServerResponceProcess[] responceProcesses)
 {
     // Httpレスポンスの処理の設定クラスを生成しプロパティに設定する
     SetResponseProcessSetting(defaultProcess, faviconProcess, responceProcesses);
 }
コード例 #3
0
 /// <summary>
 /// Httpレスポンスの処理を行うデリゲートを設定する
 /// </summary>
 /// <param name="defaultProcess">
 /// デフォルトで呼び出されるHttpレスポンスの処理の情報を格納したクラス
 /// (NULLを指定した場合は0byteのデータを返却する機能を持つクラスを設定)
 /// </param>
 /// <param name="faviconProcess">
 /// GET favicon.icoのリクエスト処理で呼び出されるHttpレスポンスの処理の情報を格納したクラス
 /// (NULLを指定した場合は0byteのデータを返却する機能を持つクラスを設定)
 /// </param>
 /// <param name="responceProcesses">
 /// Httpレスポンスの処理のクラスの配列
 /// </param>
 public void SetResponseProcessSetting(
     HttpResponseData defaultProcess,
     HttpResponseData faviconProcess,
     params LocalHttpServerResponceProcess[] responceProcesses)
 {
     // Httpレスポンスの処理の設定クラスを生成しプロパティに設定する
     lock (lockSettingObject)
     {
         Setting = new LocalHttpServerResponseSetting(
             defaultProcess, faviconProcess, responceProcesses);
     }
 }
コード例 #4
0
        /// <summary>
        /// デフォルトコンストラクタ
        /// 各プロパティの初期化を行う
        /// </summary>
        /// <param name="method">
        /// Httpメソッド
        /// </param>
        /// <param name="processName">
        /// 処理名:URLのパスの部分の名称(正規表現で設定)
        /// </param>
        /// <param name="responseData">
        /// Httpレスポンスの処理情報を格納したクラス
        /// (NULLを指定した場合は0byteのデータを返却する機能を持つクラスを設定)
        /// </param>
        /// <exception cref="ArgumentNullException">
        /// 引数の <paramref name="method"/> 又は、<paramref name="processName"/> がNULLの場合に発生
        /// </exception>
        /// <exception cref="ArgumentException">
        /// 引数の <paramref name="processName"/> が正規表現として不正な値の場合に発生
        /// </exception>
        public LocalHttpServerResponceProcess(
            HttpMethod method, string processName, HttpResponseData responseData)
        {
            // 各プロパティに値を設定

            // Httpメソッド
            Method = method ?? throw new ArgumentNullException(nameof(method));

            // Httpメソッドの文字列
            MethodString = Method.ToString();

            // URL(正規表現で設定)
            ProcessName = processName ?? throw new ArgumentNullException(nameof(processName));

            // URLの正規表現オブジェクト
            ProcessNameRegex = new Regex(ProcessName);

            // レスポンスデータに対する処理情報を格納したクラス
            // 引数がNULLの場合は0byteのデータを返却する機能を持つクラスを設定する
            ResponseData = responseData ?? LocalHttpServerCommon.EmptyDataResponse;
        }
コード例 #5
0
        /// <summary>
        /// デフォルトコンストラクタ
        /// 各プロパティの初期化を行う
        /// </summary>
        /// <param name="defaultProcess">
        /// デフォルトで呼び出されるHttpレスポンスの処理の情報を格納したクラス
        /// (NULLを指定した場合は0byteのデータを返却する機能を持つクラスを設定)
        /// </param>
        /// <param name="faviconProcess">
        /// GET favicon.icoのリクエスト処理で呼び出されるHttpレスポンスの処理の情報を格納したクラス
        /// (NULLを指定した場合は0byteのデータを返却する機能を持つクラスを設定)
        /// </param>
        /// <param name="responceProcesses">
        /// Httpレスポンスの処理のクラスの配列
        /// </param>
        public LocalHttpServerResponseSetting(
            HttpResponseData defaultProcess,
            HttpResponseData faviconProcess,
            params LocalHttpServerResponceProcess[] responceProcesses)
        {
            // 各プロパティに値を設定

            // デフォルトの処理
            // 引数がNULLの場合は0byteのデータを返却する機能を持つクラスを設定
            DefaultResponse = defaultProcess ?? LocalHttpServerCommon.EmptyDataResponse;

            // GET favicon.icoのリクエスト処理の処理
            // 引数がNULLの場合は0byteのデータを返却する機能を持つクラスを設定
            FaviconResponse = faviconProcess ?? LocalHttpServerCommon.EmptyDataResponse;

            // Httpレスポンスの処理のクラスの配列
            // 引数がNULLの場合は要素0の配列を生成し設定
            ResponceProcesses = responceProcesses == null
                ? new Collection <LocalHttpServerResponceProcess>()
                : new Collection <LocalHttpServerResponceProcess>(responceProcesses);
        }
コード例 #6
0
        private void SetResponseData(
            HttpListenerRequest request,
            Stream responseDataStream,
            out long dataSize,
            out string mimeType,
            out int statusCode)
        {
            try
            {
                // レスポンスデータを取得するためのデリゲート情報を取得する
                HttpResponseData responseData = GetTargetResponseData(request);
                dataSize   = responseData.SetStream(responseDataStream, request);
                mimeType   = responseData.MimeType;
                statusCode = 200;
            }
            catch (Exception ex)
            {
                // レスポンスデータ取得処理でエラーが発生した場合

                // スタックトレース付きのエラーメッセージを取得
                string errorMessage = ExceptionHandling.GetErrorMessageWithStackTrace(ex);

                // エラー用のHTMLレスポンスデータを生成
                string errorResponse = string.Format(
                    CultureInfo.InvariantCulture,
                    ErrorMessage.LocalHttpServerErrorResponseHtmlFormat,
                    errorMessage);
                byte[] responseData = System.Text.Encoding.UTF8.GetBytes(errorResponse);

                // 500:Internal Server Errorレスポンスを返却
                LocalHttpServerCommon.SetDataToStream(responseDataStream, responseData);
                dataSize   = responseData.LongLength;
                mimeType   = "text/html";
                statusCode = 500;
            }
        }