Åpne dagens RouteContext

stemmer
3

I MVC 5 jeg kan få tilgang HttpContextved hjelp HttpContext.Current. Hva er den foretrukne måten å få tilgang til HttpContexteller bedre, bare den nåværende RouteContext?

Publisert på 31/08/2014 klokken 07:23
kilden bruker
På andre språk...                            


1 svar

stemmer
4

Først RouteContexter ikke et objekt du vil ha tilgang til. Det er unikt brukes for å signalisere om ruten ble andled, og således ikke strømmer innenfor MVC. Du ønsker sannsynligvis å få tilgang til RouteDatastedet.

Her som noen måter å åpne den:

På en kontroller kan du få tilgang - this.ActionContext.RouteDataeller for den HttpContext.Current tilsvarende this.ActionContext.HttpContexteller direktethis.HttpContext

i en ActionFilterdu kan få tilgang til dem gjennom vedtatt i sammenheng:

public void OnActionExecuting(ActionExecutingContext context)
{
    var routeData = context.RouteData;
    var httpContext = context.HttpContext;
    ...
}

Andre steder der du har tilgang til DI-systemet (sier konstruktør av en tjeneste, eller når du har direkte tilgang til tjenesteleverandøren) du kan få på den gjeldende forespørselen er ActionContextmen merk at dette fungerer bare når du er innenfor en ramme på forespørselen og din tjenesteleverandøren du fikk gått i er omfangs til forespørselen.

public MyService(IScopedInstance<ActionContext> contextAccessor)
{
    _httpContext = contextAccessor.Value.HttpContext;
    _routeData = contextAccessor.Value.RouteData;
}

UPDATE MERK: Med Beta3 og på IContextAccessor<T>ble erstattet avIScopedInstance<T>

Merk: Du kan også bare skrive din egen "Accessor" hvis du ønsker det er bare en enkel klasse med en get / set eiendom som blir registrert som en Scoped service.

Svarte 11/09/2014 kl. 14:11
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more