Я предполагаю, что под идентификатором пользователя вы подразумеваете личность аутентифицированного пользователя.
Нет необходимости передавать эту информацию, поскольку она уже доступна в ваших контроллерах.
Для текущего пользователя:
User.Identity.Name
Для IP-адреса пользователя:
Request.UserHostAddress
Однако ведение журнала обычно распространяется на все приложения. Вы должны создать интерфейс регистратора, который может использоваться всеми областями вашего приложения без необходимости зависеть от System.Web.
Например:
public interface ILogger {
void Log(string message);
}
Затем можно создать реализацию этого, которая вызывает текущий HttpContext для получения идентификатора пользователя и IP-адреса.
public class MyLogger : ILogger {
public void Log(string message) {
var sb = new StringBuilder();
var context = HttpContext.Current;
if (context != null) {
sb.AppendLine("User: " + context.User.Identity.Name);
sb.AppendLine("IP: " + context.Request.UserHostAddress);
}
sb.AppendLine("Message: " + message);
// store the message somewhere (db, file).
// e.g. messageRepository.Save(sb.ToString());
}
}
Затем, когда вам нужно что-то зарегистрировать (в любом месте вашего приложения), вы просто берете зависимость от ILogger, которую ваш IoC-контейнер может внедрить для вас, а затем просто вызываете logger.Log("some message")
.
Да, это предполагает, что вы используете Dependency Injection и программируете по интерфейсам, но тогда вам следует:)