2016-09-02 101 views
3

下面用於記錄的索引和方面方法。如何將參數的名稱傳遞給方面方法

操作:

[LogAspect] 
public ActionResult Index(int projectId) 
{ 
    ... 
    return PartialView(model); 
} 

看點方法:

[Serializable] 
public class LogAspect : OnMethodBoundaryAspect 
{ 
    public override void OnExit(MethodExecutionArgs args) 
    { 
     var parameters = JsonConvert.SerializeObject(args.Arguments.ToList()); 
     string message = string.Format("Releted method parameters:{0}", parameters); 
     Logger.Info(string.Format("Controller:{0}, Action:{1}", args.Method.DeclaringType.FullName, args.Method.ToString()), message); 
     base.OnExit(args); 
    } 
} 

我能得到的projectid值像[1]整數。 但是,正如你猜測我正在使用這方面的方法來記錄這些信息,如果沒有參數的名稱(它被寫入數據庫)沒有意義,所以我想獲得像[projectId:1]等參數。

如果我在控制器中使用記錄器,則反射會很容易,但是我正在使用方面方法執行此過程。

回答

2

Arguments僅包含值。但是,你有通常的反射界面在Method

args 
    .Method 
    .GetParameters() 
    .Select((p, i) => new { Name = p.Name, Value = args.Arguments[i] }); 
+0

返回null都選擇和來源,但我得到了你的觀點努力實現這個.. – TyForHelpDude