我有一个相当标准的.net core 2 WebApi项目。我想在一个方法中添加一个属性,该方法将在调用操作时启动。如何在调用方法时启动的方法上添加属性?
在下面的伪代码中,当有人发布到foo
动作时,我想记录POST的正文。为此,我添加了[LogBody]
属性。但我不知道如何实际启动属性中的某个方法。
class SomeController: Controller {
[HttpPost]
[LogBody]
public void foo([FromBody] SomeObj obj) {
return View(obj);
}
}
class LogBodyAttribute: Attribute {
void LogIt() {
string methodName = getMethodName();
string body = new StreamReader(Request.Body, Encoding.UTF8).ReadToEnd();
SaveData(methodName, body);
}
}
P.S.我知道我可以用PostSharp来做到这一点,但我宁愿不要。
你不能真的'启动'一个属性。一个属性只是描述某些东西的元信息。我最好的猜测是插入一些中间件或者一个过滤器来抓取ActionContext,并根据它进行日志记录。 PostSharp的工作原理是在编译时根据属性中提供的元信息在代码中逐字添加代码。 – Jonesopolis