我正在實現一個記錄器,該記錄器應該通過一個操作過濾器來捕獲細節,以便進行用戶活動記錄和故障查找。如何在操作篩選器中記錄所有查詢參數?
public interface ISessionLogger
{
void LogUserActionSummary(int sessionId, string userActionType);
void LogUserActionDetail(int session, string userActionType, DateTime userActionStartedUtc, long actionDurationInMilliseconds, string queryParams, string referredFrom);
}
我想queryParams
捕捉從形式收集,路由值,操作參數,可以JSON調用和查詢字符串,這聽起來所有鍵和值一樣,我需要
filterContext.Controller.ValueProvider
,但似乎沒有可能循環這一點。所以在我的FilterAttribute我有
public void OnActionExecuting(ActionExecutingContext filterContext)
{
var paramList = new List<string>();
if(filterContext.ActionParameters != null)
{
paramList.AddRange(filterContext.ActionParameters.Select(param => String.Format("{0}:{1}", param.Key, param.Value.ToString())));
}
if(filterContext.Controller.ValueProvider != null)
{
//loop through the valueprovider and save the key value pairs to paramList
}
_queryParams = string.Join(",", paramList);
}
是否有另一種方式來行動濾波器的OnActionExecuting方法中實現這一目標?
你檢查MSDN有關ValueProvider更多的細節? - http://msdn.microsoft.com/en-us/library/system.web.mvc.ivalueprovider(v=vs.108).aspx – KyorCode
是的,它不是可枚舉的。 – friedX