2016-10-26 4 views
0

응용 프로그램 내에서 httpRequest를 가로 채기 (프록시가 필요 없음) 및 로그 요청 및 응답 세부 정보를 사용할 수 있도록하는 클래스를 만들어야합니다. HttpRequest는 HttpRequest가 초기화 될 때 발생하는 이벤트를 포함하는 동적 클래스를 생성하기 위해 HttpClient, HttpWebRequest, RestSharp .. Helper 라이브러리와 같은 Helper 라이브러리를 사용하여 만들 수 있습니다.내 .Net 응용 프로그램 내에서 httpRequest 및 응답을 가로 채고 기록하십시오.

이미 네트워크 추적을 사용하지만 모두 내가 로그인 할 수있는 것은 그래서 요청을 차단하는 안전한 방법이 응답은

public class DebugTraceListener : System.Diagnostics.TextWriterTraceListener 
{ 
    public override void Write(string message) 
    { 
     using (StreamWriter w = File.AppendText("D:\\Log\\log2.txt")) 
     { 
      Log(message, w); 
     } 
    } 

    public override void WriteLine(string message) 
    { 
     using (StreamWriter w = File.AppendText("D:\\Log\\log2.txt")) 
     { 
      Log(message, w); 
     } 
    } 

    public static void Log(string logMessage, TextWriter w) 
    { 
     w.WriteLine(" :{0}", logMessage); 
     w.WriteLine("-------------------------------"); 
    } 
} 
+0

"네트워크 추적"이란 무엇을 의미합니까? ''에서''를 활성화하면 요청과 응답이 모두 생깁니다. 형식 : 표준 .NET 메커니즘을 사용하여 로그를 작성한 다음 자신 만의 청취자를 작성할 수 있습니다 (표준 'TextWriterTraceListener'형식이 마음에 들지 않으면). 물론 로그 메시지를 해석하고 싶다면 로그 메시지를 이해해야합니다. –

+0

나는이 https://msdn.microsoft.com/en-us/library/a6sbz1dx(v=vs.110).aspx를 사용했습니다. 그래서 독자 목록을 작성하면 출력 형식을 제어 할 수 있습니다. –

+0

@AdrianoRepetti 그리고 web.config가 아닌 코드를 사용하여 모든 작업을 수행 할 수 있습니까? –

답변

0

난 당신이 asp.net 웹 양식을 사용하는 가정입니다 대신 구문 분석 문자열의 객체, 문자열 또는 asp.net mvc.

using System.Web; 


namespace WebApplication1.App_Start 
{ 
using System; 

public class RequestHandler : HttpApplication,IHttpModule 
{ 
    /// <summary> 
    /// Initializes a module and prepares it to handle requests. 
    /// </summary> 
    /// <param name="context">An <see cref="T:System.Web.HttpApplication"/> that provides access to the methods, properties, and events common to all application objects within an ASP.NET application </param> 
    public void Init(HttpApplication context) 
    { 

     context.BeginRequest += context_BeginRequest; 
     context.EndRequest += context_RequestCompleted; 
    } 

    void context_RequestCompleted(object sender, EventArgs e) 
    { 
     var application = (HttpApplication)sender; 
     var context = application.Context; 

     var response = context.Response; 
     context.Response.Write(response.Charset); 
    } 

    void context_BeginRequest(object sender, EventArgs e) 
    { 
     var application = (HttpApplication)sender; 
     var context = application.Context; 

     var url = context.Request.Url; 
     context.Response.Write(url.AbsoluteUri); 
    } 

    /// <summary> 
    /// Disposes of the resources (other than memory) used by the module that implements <see cref="T:System.Web.IHttpModule"/>. 
    /// </summary> 
    public void Dispose() 
    { 
     throw new NotImplementedException(); 
    } 



} 
} 

다음, 다음 줄에를 추가하여 Web.config의에서 HttpModule을 등록 : 당신은 내가 다음과 같은 모듈을 만든

IHttpModule을 클래스 같이 HttpApplication를 확장하고, 인터페이스를 구현하는 클래스를 작성해야 아래 :

<system.webServer> 
<modules> 
    <add name="Handler" type="WebApplication1.App_Start.RequestHandler"/> 
    <remove name="FormsAuthenticationModule" /> 
</modules> 
</system.webServer> 

요청할 때마다 수신 된 응답의 URL과 문자 세트가 기록됩니다.

하면 로깅 명령에 의해 다음 줄을 교체 : 당신은 내가 위에서 정의 된 응답URL 변수의 다른 속성을 기록 할 수

Logger.Log(url.AbsoluteUri) //in context_BeginRequest 
Logger.Log(response.ContentType) //in context_RequestCompleted 

: 예에 대한

context.Response.Write(url.AbsoluteUri); 
context.Response.Write(response.Charset); 

.

희망 하시겠습니까?

+0

Helper 클래스를 만들어야합니다. .Net 응용 프로그램 호출 웹 서비스 (Web, Windows, Console .. anything)에서 사용할 수 있습니다. –