チェンジセット 1679 (default)
- 日時:
- 2024/08/30 22:12:30 (5週前)
- 場所:
- framework/trunk
- ファイル:
-
- 7個の更新
凡例:
- 未変更
- 追加
- 削除
-
framework/trunk/WebLibrary/Properties/Resources.designer.cs
r1678 r1679 1832 1832 1833 1833 /// <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>1843 1834 /// Web response sent. に類似しているローカライズされた文字列を検索します。 1844 1835 /// </summary> -
framework/trunk/WebLibrary/Properties/Resources.ja.resx
r1678 r1679 363 363 <value>レスポンス: ContentType</value> 364 364 </data> 365 <data name="Log_Web_WebDebugging_ResponseContentTypeWithEncodingValue" xml:space="preserve">366 <value>{0}; charset={1}</value>367 </data>368 365 <data name="Log_Web_WebDebugging_ResponseHeader" xml:space="preserve"> 369 366 <value>Web レスポンスを送信しました。</value> -
framework/trunk/WebLibrary/Properties/Resources.resx
r1678 r1679 492 492 Path: {0}</value> 493 493 </data> 494 <data name="Log_Web_WebDebugging_ResponseContentTypeWithEncodingValue" xml:space="preserve">495 <value>{0}; charset={1}</value>496 </data>497 494 <data name="Log_Web_WebDebugging_ResponseContentTypeKey" xml:space="preserve"> 498 495 <value>Response: ContentType</value> -
framework/trunk/WebLibrary/Sources/Handlers/HttpHandlerBase.cs
r1678 r1679 597 597 if (!ServiceErrorHandlerModule.Registered) 598 598 { 599 WebDebugging.LogResponse(logger, ex);599 WebDebugging.LogResponse(logger, context.Response, ex); 600 600 } 601 601 } … … 619 619 if (!ServiceErrorHandlerModule.Registered) 620 620 { 621 WebDebugging.LogResponse(logger, httpUnhandledException);621 WebDebugging.LogResponse(logger, context.Response, httpUnhandledException); 622 622 } 623 623 } -
framework/trunk/WebLibrary/Sources/Reflections.cs
r1665 r1679 604 604 605 605 /// <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> 606 680 /// <see cref="System.Web.UI.Control"/> に関係するリフレクションの集合です。 607 681 /// </summary> -
framework/trunk/WebLibrary/Sources/WebDebugging.cs
r1678 r1679 29 29 using System.Net; 30 30 using System.Security.Principal; 31 using System.Text;32 31 using System.Text.RegularExpressions; 33 32 using System.Threading; … … 402 401 /// ログの出力先。 403 402 /// </param> 403 /// <param name="response"> 404 /// HTTP レスポンス。 405 /// </param> 404 406 /// <param name="ex"> 405 407 /// HTTP 例外。 406 408 /// </param> 407 internal static void LogResponse(ILogger logger, HttpException ex) 409 internal static void LogResponse( 410 ILogger logger, 411 HttpResponse response, 412 HttpException ex) 408 413 { 409 414 if (logger == null || !logger.InformationEnabled(LoggingTargets.Trace)) … … 420 425 true); 421 426 422 AppendResponse(builder, ex);427 AppendResponse(builder, response, ex); 423 428 424 429 LogInformation(logger, webLogger, Logging.WebWebDebuggingResponse, builder.ToString()); … … 466 471 if (exception != null) 467 472 { 468 AppendResponse(builder, exception);473 AppendResponse(builder, response, exception); 469 474 } 470 475 else if (response != null) … … 609 614 AppendResponse( 610 615 builder, 616 response, 611 617 response.Status, 612 618 response.ContentType, 613 response.ContentEncoding,614 619 response.RedirectLocation, 615 620 message); … … 622 627 /// ログビルダー。 623 628 /// </param> 629 /// <param name="response"> 630 /// HTTP レスポンス。 631 /// </param> 624 632 /// <param name="exception"> 625 633 /// 例外。 … … 627 635 private static void AppendResponse( 628 636 MultilineTraceStringBuilder builder, 637 HttpResponse response, 629 638 Exception exception) 630 639 { … … 639 648 AppendResponse( 640 649 builder, 650 response, 641 651 string.Format( 642 652 CultureInfo.InvariantCulture, … … 644 654 statusCode, 645 655 HttpWorkerRequest.GetStatusDescription(statusCode)), 646 null,647 656 null, 648 657 null, … … 661 670 /// ログビルダー。 662 671 /// </param> 672 /// <param name="response"> 673 /// HTTP レスポンス。 674 /// </param> 663 675 /// <param name="status"> 664 676 /// HTTP ステータスライン。 … … 667 679 /// コンテンツタイプ。 668 680 /// </param> 669 /// <param name="contentEncoding">670 /// コンテンツエンコーディング。671 /// </param>672 681 /// <param name="redirectLocation"> 673 682 /// リダイレクト先。 … … 678 687 private static void AppendResponse( 679 688 MultilineTraceStringBuilder builder, 689 HttpResponse response, 680 690 string status, 681 691 string contentType, 682 Encoding contentEncoding,683 692 string redirectLocation, 684 693 string message) … … 688 697 if (!string.IsNullOrEmpty(contentType)) 689 698 { 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); 703 701 } 704 702 -
framework/trunk/WebTest/Sources/ReflectionsTest.cs
r1665 r1679 24 24 { 25 25 using System.Diagnostics; 26 using System.IO; 27 using System.Text; 26 28 using System.Web; 27 29 using NUnit.Framework; … … 289 291 #endregion 290 292 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 291 346 #region Control 292 347
※ 詳しい使い方は
TracChangeset を参照してください。