前言
主要是記錄一下實作的錯誤日志攔截,可以在攔截器里面控制回傳的資訊,把錯誤資訊處理后回傳給請求端,
代碼實戰
攔截器
/// <summary>
/// 介面例外捕捉過濾器
/// </summary>
[AttributeUsage(AttributeTargets.All, AllowMultiple = false, Inherited = true)]
public class ApiErrorHandleAttribute : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext actionExecutedContext)
{
base.OnException(actionExecutedContext);
actionExecutedContext.Response = GetResponse(actionExecutedContext);
}
/// <summary>
/// 捕捉例外后回應方法
/// </summary>
private HttpResponseMessage GetResponse(HttpActionExecutedContext actionExecutedContext)
{
var requesthost = actionExecutedContext.ActionContext.Request.RequestUri.ToString();//當前請求的地址,包括ip加介面地址
var method = actionExecutedContext.ActionContext.Request.Method.ToString();//當前請求是POST/GET/PUT/DELETE ……
var controller = actionExecutedContext.ActionContext.ActionDescriptor.ControllerDescriptor.ControllerType.FullName;//當前請求的控制器所在全路徑:xxx.WebAPI.Controllers.xxxController
var action = actionExecutedContext.ActionContext.ActionDescriptor.ActionName; //當前請求的方法
var paramters = actionExecutedContext.ActionContext.ActionArguments; //獲取當前請求的引數
var ip = HttpContext.Current.Request.UserHostAddress;
LogHelper.Error($"錯誤資訊:URL:{actionExecutedContext.Request.RequestUri},--引數資訊:{paramters.ToJson()},--actionExecutedContext.Exception:{actionExecutedContext.Exception.ToJson()}");
var response = new { code = 506, message = $"{actionExecutedContext.Exception.Message},URL:{actionExecutedContext.Request.RequestUri}", ex = actionExecutedContext.Exception };
return JsonHelper.ToHttpResponseMessage(response);
}
}
工具類方法
public static class JsonHelper
{
/// <summary>
/// 轉化為json格式的HttpResponseMessage
/// </summary>
public static HttpResponseMessage ToHttpResponseMessage(object obj)
{
string str;
if (obj is string || obj is char)
{
str = obj.ToString();
}
else
{
str = obj.ToJson();
}
var result = new HttpResponseMessage { Content = new StringContent(str, Encoding.GetEncoding("UTF-8"), "application/json") };
return result;
}
/// <summary>
/// 轉化為json字串,默認的時間格式
/// </summary>
/// <param name="obj">要被轉化的物件</param>
/// <returns>json字串</returns>
public static string ToJson(this object obj)
{
return JsonConvert.SerializeObject(obj, new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore, DateFormatString = "yyyy-MM-dd HH:mm:ss" });
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/276879.html
標籤:ASP.NET
