using MyCode.Project.Domain.Config;
using MyCode.Project.Infrastructure.Cache;
using MyCode.Project.Infrastructure.Common;
using MyCode.Project.Infrastructure.Constant;
using MyCode.Project.Infrastructure.UnityExtensions;
using System;
using System.IO;
using System.Text;
using System.Web;
namespace MyCode.Project.WebApi.App_Modules
{
public class WebApiModule : IHttpModule
{
///
/// 您将需要在网站的 Web.config 文件中配置此模块
/// 并向 IIS 注册它,然后才能使用它。有关详细信息,
/// 请参见下面的链接: http://go.microsoft.com/?linkid=8101007
///
#region IHttpModule Members
public static IMyCodeCacheService _myCodeCacheService = null;
public void Dispose()
{
//此处放置清除代码。
}
public void Init(HttpApplication context)
{
//var sree = context.Response;
// 下面是如何处理 LogRequest 事件并为其
// 提供自定义日志记录实现的示例
context.BeginRequest += (new
EventHandler(this.Application_BeginRequest));
}
#endregion
///
///
///
///
///
public void OnLogRequest(Object source, EventArgs e)
{
//可以在此处放置自定义日志记录逻辑
}
private void Application_BeginRequest(Object source, EventArgs e)
{
HttpApplication Application = (HttpApplication)source;
HttpContext ctx = Application.Context;
if(_myCodeCacheService==null)
_myCodeCacheService = UnityHelper.GetService();
//IP地址
string isIp = ctx.Request.UserHostAddress;
string url = ctx.Request.RawUrl;
string requestDataStr = "";
var stream = ctx.Request.InputStream;
if (stream != null && stream.Length > 0)
{
stream.Position = 0; //当你读取完之后必须把stream的读取位置设为开始
StreamReader reader = new StreamReader(stream, System.Text.Encoding.UTF8);
requestDataStr = reader.ReadToEnd().ToString();
if (reader.EndOfStream)
stream.Position = 0;
}
if (!string.IsNullOrWhiteSpace(url) && url.Length > 3 && url.Contains("api/"))
{
var sb = new StringBuilder(Environment.NewLine + "-----------------------------------------" + Environment.NewLine);
sb.AppendLine(DateTime.Now + " " + url);
sb.AppendLine($"请求IP:{isIp}");
sb.AppendLine($"请求参数:{requestDataStr}");
try
{
sb.AppendLine($"请求token:{ctx.Request.Headers["Authorization"]}");
var logininfo = TokenHelper.Get(ctx.Request.Headers["Authorization"].Trim(),
SystemConfig.JwtKey,
Const.LoginInfoKey);
Log(sb.ToString());
if(logininfo!=null)
Log(JsonHelper.ToJson(logininfo));
}
catch (Exception ex)
{
Log("异常的访问:"+sb.ToString());
}
}
}
private void Application_EndRequest(Object source, EventArgs e)
{
}
public static void Log(string str)
{
string now = DateTime.Now.Date.ToString("yyyy-MM-dd");
string path = HttpContext.Current.Server.MapPath("~") + @"/RequestLog/";
string fileName = now + "Log.txt";
string sourceFilePath = path + fileName;
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
try
{
using (StreamWriter sw = File.AppendText(sourceFilePath))
{
if (!System.IO.File.Exists(sourceFilePath))
{
FileInfo fileinfo = new FileInfo(sourceFilePath);
fileinfo.Create();
}
sw.WriteLine(str);
}
}
catch
{ }
}
}
}