Reputation: 1698
i have a Hit-Log class in my pre-vnext mvc like this :
private LogInformation GetLogInfo(System.Web.Routing.RequestContext requestContext)
{
LogInformation Log = new LogInformation();
Log.IP = requestContext.HttpContext.Request.ServerVariables["REMOTE_ADDR"];
Log.RemoteIP = requestContext.HttpContext.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
Log.Refrence = requestContext.RouteData.Values["controller"] + "/" + requestContext.RouteData.Values["action"];
Log.Agent = requestContext.HttpContext.Request.Headers["User-Agent"];
return Log;
}
and the new one for classlibrary-package(vNext):
private LogInformation GetLogInfo(IHttpContextAccessor requestContext)
{
LogInformation Log = new LogInformation();
Log.IP = requestContext.HttpContext.Connection.RemoteIpAddress.ToString();
Log.RemoteIP = requestContext.HttpContext.Request.Headers["HTTP_X_FORWARDED_FOR"].ToString();
Log.Refrence = requestContext.RouteData.Values["controller"] + "/" + requestContext.RouteData.Values["action"];
Log.Agent = requestContext.HttpContext.Request.Headers["User-Agent"];
return Log;
}
after this i get this error :
'IHttpContextAccessor' does not contain a definition for 'RouteData' and no
extension method 'RouteData' accepting a first argument of type
'IHttpContextAccessor' could be found (are you missing a using directive or an
assembly reference?) UtilityPackage..NET Framework 4.5.1
i guess they changed the location of RouteData in asp.net 5.
is there anyway i can access it in this class ?
Upvotes: 2
Views: 6780
Reputation: 5967
Solution is quite simple , just inject an instance of IActionContextAccessor
and you are set.
public class Foo()
{
private readonly IActionContextAccessor _actionContextAccessor;
public Foo(IActionContextAccessor actionContextAccessor){
_actionContextAccessor = actionContextAccessor;
}
private LogInformation GetLogInfo(IHttpContextAccessor requestContext)
{
.
.
.
Log.Refrence = _actionContextAccessor.ActionContext.RouteData.Values["controller"] + "/" + _actionContextAccessor.ActionContext.RouteData.Values["action"];
.
.
.
return Log;
}
}
Cheers!
Upvotes: 3