나는 꽤 표준 .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. PostSharp로이 작업을 수행 할 수 있다는 것을 알고 있지만 오히려 사용하지 않을 것입니다.
당신은 정말로 속성을 시작할 수 없습니다. 속성은 무언가를 기술하기위한 메타 정보 일뿐입니다. 가장 좋은 추측은 ActionContext를 잡아서 미들웨어 또는 필터를 연결하고이를 기반으로 로깅을 수행하는 것입니다. PostSharp는 속성에 제공된 메타 정보를 기반으로 컴파일시 문자 그대로 메소드에 코드를 추가하여 작동합니다. – Jonesopolis