2012-05-15 2 views
5

웹 서비스의 JSON 요청 로그인하는 방법 :나는이 같은 jQuery의 아약스 메서드에서 호출되는 웹 메소드를 가지고

$.ajax({ 
    type: "POST", 
    url: "MyWebService.aspx/DoSomething", 
    data: '{"myClass": ' + JSON.stringify(myClass) + '}', 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    async: false, 
    success: function (result) { 
     alert("success"); 
    }, 
    error: function() { 
     alert("error"); 
    } 
}); 

을 그리고 이것은 내 웹 방법 :

[WebMethod(EnableSession = true)] 
public static object DoSomething(MyClass myClass) 
{ 
    HttpContext.Current.Request.InputStream.Position = 0; 
    using (var reader = new StreamReader(HttpContext.Current.Request.InputStream)) 
    { 
    Logger.Log(reader.ReadToEnd()); 
    } 
} 

하는 경우 javascript의 myClass가 올바른 형식으로 직렬화 된 다음 DoSomething 메서드가 실행되어 원시 json을 데이터베이스에 저장합니다. 그러나 myClass가 잘못된 경우 메서드가 전혀 실행되지 않고 문제가있는 JSON을 기록 할 수 없습니다.

원시 json을 항상 가져 와서 로그하는 가장 좋은 방법은 내 웹입니다. 메서드는 직렬화가 실패하더라도 수신합니까?

+1

것은 "IIS 로그 요청 HttpModule을은"당신이 뭔가를 찾아야한다 인터넷 검색을 시도 유래에 대한 몇 가지 다른 답변의 도움으로 – Alex

+0

@alex - 감사합니다. IHttpModule은 내가 필요한 것입니다. – sventevit

답변

1

나는이 온 유용 (죄송합니다 지금 당장 관련 코드를 찾을 수 없습니다)
-3

항상 서버 쪽에서 할 수 있습니다.

웹 서비스를 호출하는 "MyWebService.aspx/DoSomething"에 요청을 보내면 결과 (성공/오류)를 로그 파일에 기록 할 수 있습니다.

public class RequestLogModule : IHttpModule 
{ 
    private HttpApplication _application; 

    public void Dispose() 
    { 
    } 

    public void Init(HttpApplication context) 
    { 
     _application = context; 
     _application.BeginRequest += ContextBeginRequest; 
    } 

    private void ContextBeginRequest(object sender, EventArgs e) 
    { 
     var request = _application.Request; 

     var bytes = new byte[request.InputStream.Length]; 
     request.InputStream.Read(bytes, 0, bytes.Length); 
     request.InputStream.Position = 0; 
     string content = Encoding.UTF8.GetString(bytes); 

     Logger.LogRequest(
      request.UrlReferrer == null ? "" : request.UrlReferrer.AbsoluteUri, 
      request.Url.AbsoluteUri, 
      request.UserAgent, 
      request.UserHostAddress, 
      request.UserHostName, 
      request.UserLanguages == null ? "" : request.UserLanguages.Aggregate((a, b) => a + "," + b), 
      request.ContentType, 
      request.HttpMethod, 
      content 
     ); 
    } 
} 

을 그리고의 Web.config :

<httpModules> 
    <add name="MyRequestLogModule" type="MyNamespace.RequestLogModule, MyAssembly"/> 
</httpModules> 
관련 문제