チェンジセット 1679 (default)


以下の違いを無視:
日時:
2024/08/30 22:12:30 (5週前)
更新者:
hizuya@…
ログメッセージ:
  • Web レスポンスログに記録される CntentType の charset が HTTP クライアントに返した値とは異なる可能性があったのを修正。
場所:
framework/trunk
ファイル:
7個の更新

凡例:

未変更
追加
削除
  • framework/trunk/WebLibrary/Properties/Resources.designer.cs

    r1678 r1679  
    18321832         
    18331833        /// <summary> 
    1834         ///   {0}; charset={1} に類似しているローカライズされた文字列を検索します。 
    1835         /// </summary> 
    1836         internal static string Log_Web_WebDebugging_ResponseContentTypeWithEncodingValue { 
    1837             get { 
    1838                 return ResourceManager.GetString("Log_Web_WebDebugging_ResponseContentTypeWithEncodingValue", resourceCulture); 
    1839             } 
    1840         } 
    1841          
    1842         /// <summary> 
    18431834        ///   Web response sent. に類似しているローカライズされた文字列を検索します。 
    18441835        /// </summary> 
  • framework/trunk/WebLibrary/Properties/Resources.ja.resx

    r1678 r1679  
    363363    <value>レスポンス: ContentType</value> 
    364364  </data> 
    365   <data name="Log_Web_WebDebugging_ResponseContentTypeWithEncodingValue" xml:space="preserve"> 
    366     <value>{0}; charset={1}</value> 
    367   </data> 
    368365  <data name="Log_Web_WebDebugging_ResponseHeader" xml:space="preserve"> 
    369366    <value>Web レスポンスを送信しました。</value> 
  • framework/trunk/WebLibrary/Properties/Resources.resx

    r1678 r1679  
    492492Path: {0}</value> 
    493493  </data> 
    494   <data name="Log_Web_WebDebugging_ResponseContentTypeWithEncodingValue" xml:space="preserve"> 
    495     <value>{0}; charset={1}</value> 
    496   </data> 
    497494  <data name="Log_Web_WebDebugging_ResponseContentTypeKey" xml:space="preserve"> 
    498495    <value>Response: ContentType</value> 
  • framework/trunk/WebLibrary/Sources/Handlers/HttpHandlerBase.cs

    r1678 r1679  
    597597                    if (!ServiceErrorHandlerModule.Registered) 
    598598                    { 
    599                         WebDebugging.LogResponse(logger, ex); 
     599                        WebDebugging.LogResponse(logger, context.Response, ex); 
    600600                    } 
    601601                } 
     
    619619                    if (!ServiceErrorHandlerModule.Registered) 
    620620                    { 
    621                         WebDebugging.LogResponse(logger, httpUnhandledException); 
     621                        WebDebugging.LogResponse(logger, context.Response, httpUnhandledException); 
    622622                    } 
    623623                } 
  • framework/trunk/WebLibrary/Sources/Reflections.cs

    r1665 r1679  
    604604 
    605605        /// <summary> 
     606        /// <see cref="System.Web.HttpResponse"/> に関係するリフレクションの集合です。 
     607        /// </summary> 
     608        internal static class HttpResponse 
     609        { 
     610            /// <summary> 
     611            /// <c>AppendCharSetToContentType</c> メソッドを呼び出すデリゲートです。 
     612            /// </summary> 
     613            private static readonly Func<System.Web.HttpResponse, string, string> AppendCharSetToContentTypeDelegate = InitializeAppendCharSetToContentTypeDelegate(); 
     614 
     615 
     616            /// <summary> 
     617            /// 使用出来るかどうかを返します。 
     618            /// </summary> 
     619            /// <value> 
     620            /// 使用出来る場合は <see langword="true"/>。 
     621            /// それ以外の場合は <see langword="false"/>。 
     622            /// </value> 
     623            internal static bool IsValid 
     624            { 
     625                get 
     626                { 
     627                    return AppendCharSetToContentTypeDelegate != null; 
     628                } 
     629            } 
     630 
     631 
     632            /// <summary> 
     633            /// <c>AppendCharSetToContentType</c> メソッドを呼び出します。 
     634            /// </summary> 
     635            /// <param name="response">HTTP レスポンス。</param> 
     636            /// <param name="contentType">コンテンツタイプ。</param> 
     637            /// <returns> 
     638            /// <c>charset</c> を付けたコンテンツタイプ。 
     639            /// </returns> 
     640            internal static string AppendCharSetToContentType(System.Web.HttpResponse response, string contentType) 
     641            { 
     642                if (AppendCharSetToContentTypeDelegate == null) 
     643                { 
     644                    return null; 
     645                } 
     646 
     647                return AppendCharSetToContentTypeDelegate(response, contentType); 
     648            } 
     649 
     650 
     651            /// <summary> 
     652            /// <see cref="AppendCharSetToContentTypeDelegate"/> を初期化します。 
     653            /// </summary> 
     654            /// <returns> 
     655            /// <c>AppendCharSetToContentType</c> メソッドを呼び出すデリゲート。 
     656            /// </returns> 
     657            private static Func<System.Web.HttpResponse, string, string> InitializeAppendCharSetToContentTypeDelegate() 
     658            { 
     659                MethodInfo appendCharSetToContentTypeMethodInfo 
     660                    = typeof(System.Web.HttpResponse).GetMethod( 
     661                        "AppendCharSetToContentType", 
     662                        BindingFlags.Instance | BindingFlags.NonPublic, 
     663                        null, 
     664                        new[] { typeof(string) }, 
     665                        null); 
     666                if (appendCharSetToContentTypeMethodInfo == null) 
     667                { 
     668                    return null; 
     669                } 
     670 
     671                return delegate(System.Web.HttpResponse response, string contentType) 
     672                { 
     673                    return (string)appendCharSetToContentTypeMethodInfo.Invoke(response, new object[] { contentType }); 
     674                }; 
     675            } 
     676        } 
     677 
     678 
     679        /// <summary> 
    606680        /// <see cref="System.Web.UI.Control"/> に関係するリフレクションの集合です。 
    607681        /// </summary> 
  • framework/trunk/WebLibrary/Sources/WebDebugging.cs

    r1678 r1679  
    2929    using System.Net; 
    3030    using System.Security.Principal; 
    31     using System.Text; 
    3231    using System.Text.RegularExpressions; 
    3332    using System.Threading; 
     
    402401        /// ログの出力先。 
    403402        /// </param> 
     403        /// <param name="response"> 
     404        /// HTTP レスポンス。 
     405        /// </param> 
    404406        /// <param name="ex"> 
    405407        /// HTTP 例外。 
    406408        /// </param> 
    407         internal static void LogResponse(ILogger logger, HttpException ex) 
     409        internal static void LogResponse( 
     410            ILogger logger, 
     411            HttpResponse response, 
     412            HttpException ex) 
    408413        { 
    409414            if (logger == null || !logger.InformationEnabled(LoggingTargets.Trace)) 
     
    420425                    true); 
    421426 
    422             AppendResponse(builder, ex); 
     427            AppendResponse(builder, response, ex); 
    423428 
    424429            LogInformation(logger, webLogger, Logging.WebWebDebuggingResponse, builder.ToString()); 
     
    466471            if (exception != null) 
    467472            { 
    468                 AppendResponse(builder, exception); 
     473                AppendResponse(builder, response, exception); 
    469474            } 
    470475            else if (response != null) 
     
    609614            AppendResponse( 
    610615                builder, 
     616                response, 
    611617                response.Status, 
    612618                response.ContentType, 
    613                 response.ContentEncoding, 
    614619                response.RedirectLocation, 
    615620                message); 
     
    622627        /// ログビルダー。 
    623628        /// </param> 
     629        /// <param name="response"> 
     630        /// HTTP レスポンス。 
     631        /// </param> 
    624632        /// <param name="exception"> 
    625633        /// 例外。 
     
    627635        private static void AppendResponse( 
    628636            MultilineTraceStringBuilder builder, 
     637            HttpResponse response, 
    629638            Exception exception) 
    630639        { 
     
    639648            AppendResponse( 
    640649                builder, 
     650                response, 
    641651                string.Format( 
    642652                    CultureInfo.InvariantCulture, 
     
    644654                    statusCode, 
    645655                    HttpWorkerRequest.GetStatusDescription(statusCode)), 
    646                 null, 
    647656                null, 
    648657                null, 
     
    661670        /// ログビルダー。 
    662671        /// </param> 
     672        /// <param name="response"> 
     673        /// HTTP レスポンス。 
     674        /// </param> 
    663675        /// <param name="status"> 
    664676        /// HTTP ステータスライン。 
     
    667679        /// コンテンツタイプ。 
    668680        /// </param> 
    669         /// <param name="contentEncoding"> 
    670         /// コンテンツエンコーディング。 
    671         /// </param> 
    672681        /// <param name="redirectLocation"> 
    673682        /// リダイレクト先。 
     
    678687        private static void AppendResponse( 
    679688            MultilineTraceStringBuilder builder, 
     689            HttpResponse response, 
    680690            string status, 
    681691            string contentType, 
    682             Encoding contentEncoding, 
    683692            string redirectLocation, 
    684693            string message) 
     
    688697            if (!string.IsNullOrEmpty(contentType)) 
    689698            { 
    690                 if (contentEncoding != null) 
    691                 { 
    692                     builder.Append( 
    693                         Resources.Log_Web_WebDebugging_ResponseContentTypeKey, 
    694                         Utility.Format( 
    695                             Resources.Log_Web_WebDebugging_ResponseContentTypeWithEncodingValue, 
    696                             contentType, 
    697                             contentEncoding.WebName)); 
    698                 } 
    699                 else 
    700                 { 
    701                     builder.Append(Resources.Log_Web_WebDebugging_ResponseContentTypeKey, contentType); 
    702                 } 
     699                contentType = Reflections.HttpResponse.AppendCharSetToContentType(response, contentType); 
     700                builder.Append(Resources.Log_Web_WebDebugging_ResponseContentTypeKey, contentType); 
    703701            } 
    704702 
  • framework/trunk/WebTest/Sources/ReflectionsTest.cs

    r1665 r1679  
    2424{ 
    2525    using System.Diagnostics; 
     26    using System.IO; 
     27    using System.Text; 
    2628    using System.Web; 
    2729    using NUnit.Framework; 
     
    289291        #endregion 
    290292 
     293        #region HttpResponse 
     294 
     295        /// <summary> 
     296        /// <see cref="Reflections.HttpResponse"/> が使用出来るかのテストです。 
     297        /// </summary> 
     298        [Test] 
     299        public void TestHttpResponseIsValid() 
     300        { 
     301            Assert.That(Reflections.HttpResponse.IsValid, Is.True); 
     302        } 
     303 
     304        /// <summary> 
     305        /// <see cref="Reflections.HttpResponse"/> の <c>AppendCharSetToContentType</c> へアクセスするテストです。 
     306        /// </summary> 
     307        [Test] 
     308        public void TestAppendCharSetToContentTypeFromContentEncoding() 
     309        { 
     310            using (StringWriter writer = new StringWriter()) 
     311            { 
     312                // TODO: new HttpContext(HttpWorkerRequest).Response を使用しないと ContentEncoding から charset が設定されない 
     313                HttpResponse response = new HttpResponse(writer) 
     314                { 
     315                    ContentEncoding = Encoding.UTF8, 
     316                }; 
     317 
     318                Assert.That( 
     319                    Reflections.HttpResponse.AppendCharSetToContentType(response, "text/html"), 
     320                    Is.EqualTo("text/html")); 
     321                    ////Is.EqualTo("text/html; charset=utf-8")); 
     322            } 
     323        } 
     324 
     325        /// <summary> 
     326        /// <see cref="Reflections.HttpResponse"/> の <c>AppendCharSetToContentType</c> へアクセスするテストです。 
     327        /// </summary> 
     328        [Test] 
     329        public void TestAppendCharSetToContentTypeFromCharset() 
     330        { 
     331            using (StringWriter writer = new StringWriter()) 
     332            { 
     333                HttpResponse response = new HttpResponse(writer) 
     334                { 
     335                    Charset = "ascii", 
     336                }; 
     337 
     338                Assert.That( 
     339                    Reflections.HttpResponse.AppendCharSetToContentType(response, "text/html"), 
     340                    Is.EqualTo("text/html; charset=ascii")); 
     341            } 
     342        } 
     343 
     344        #endregion 
     345 
    291346        #region Control 
    292347 
詳しい使い方は TracChangeset を参照してください。