Ahad Porkar
Ahad Porkar

Reputation: 1698

Accessing requestContext.RouteData.Values in Asp.net 5 (vNext)

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

Answers (1)

Behnam Esmaili
Behnam Esmaili

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

Related Questions