В MVC 5 I вы можете получить доступ к HttpContext
, используя HttpContext.Current
. Каков предпочтительный способ доступа к HttpContext
или лучше, только текущий RouteContext
?Доступ к текущему RouteContext
ответ
Первый RouteContext
не является объектом, к которому вы хотите получить доступ. Он уникально используется, чтобы сигнализировать, был ли маршрут маршрутизирован и, следовательно, не течет внутри MVC. Вероятно, вы захотите получить доступ к RouteData
.
Вот как несколько способов доступа к нему:
На контроллере вы можете получить доступ - this.ActionContext.RouteData
или для HttpContext.Current эквивалент this.ActionContext.HttpContext
или непосредственно this.HttpContext
в ActionFilter
вы можете получить доступ к ним через пропущенный в контексте:
public void OnActionExecuting(ActionExecutingContext context)
{
var routeData = context.RouteData;
var httpContext = context.HttpContext;
...
}
в любом другом месте, где есть доступ к системе DI (скажем, конструктор службы, или если у вас есть прямой доступ к серв ice provider) вы можете получить в текущем запросе ActionContext
, но обратите внимание, что это работает только в том случае, если вы находитесь в пределах объема запроса, и ваш сервисный сервис, который вы получили, привязан к запросу.
public MyService(IScopedInstance<ActionContext> contextAccessor)
{
_httpContext = contextAccessor.Value.HttpContext;
_routeData = contextAccessor.Value.RouteData;
}
UPDATE Примечание: С Beta3 и IContextAccessor<T>
был заменен IScopedInstance<T>
Примечание: Вы также можете просто написать свой собственный «Accessor», если вы хотите, это просто простой класс с GET/set свойство, которое регистрируется как служба Scoped.
- 1. Доступ к текущему местоположению iPhone
- 2. Доступ к текущему номеру редакции
- 3. Доступ к текущему пользователю из Apple Watch
- 4. Доступ к текущему HttpContext из HttpActionContext
- 5. Доступ к текущему HttpContext из рабочего процесса?
- 6. Доступ к текущему виду из AppDelegate
- 7. Rails получает доступ к текущему пользователю
- 8. Как получить доступ к текущему DataGridView динамически
- 9. Доступ к текущему пользователю в ExpressJs - Passport
- 10. Доступ к дочернему «текущему» объекту в rabl
- 11. Сохранить доступ к текущему местоположению UIWebView
- 12. Доступ к текущему запросу в контроллере
- 13. Rails act_as_tenant - доступ к текущему арендатору
- 14. Доступ к текущему значению свойства в сеттере
- 15. Доступ к текущему HttpContext из ILogger
- 16. Доступ к «текущему» диапазону от «корневого» контроллера
- 17. Доступ к текущему контексту в PersistentConnection
- 18. Как получить доступ к текущему местоположению iframe?
- 19. Доступ к текущему положению в Spotify Api
- 20. Как получить доступ к текущему изображению bg?
- 21. Доступ к текущему субдомену в config.yml
- 22. Доступ к текущему элементу на backbone.js-событиях?
- 23. Доступ к текущему URI Нокогири HTML-документ
- 24. Доступ к текущему HttpContext в ASP.NET Core
- 25. WebActivator - доступ к объекту/текущему каталогу сервера
- 26. MVC - В чем смысл RouteContext?
- 27. добавить проект к текущему
- 28. Общие типы - доступ к текущему классу в суперклассе
- 29. Доступ к текущему значению элемента формы в Drupal
- 30. Не удается получить доступ к «текущему пользователю» в рельсах
Хорошо, я вижу. В моем случае экземпляр 'MyService' создается в' Startup.cs' следующим образом: 'app.UseMvc (routes => {routes.Routes.Add (новый DefaultRouter (routes.DefaultHandler, новый DefaultRouteResolver (новый RouteResolverTrie (DocumentStore) , // Мне нужно разместить здесь IContextAccessor //)))); ' Можно ли использовать' Func> 'в этот момент, чтобы я мог отправить текущий IContextAccessor для каждого запроса ? –
Marcus
Когда вы что-то новое, вы отказываетесь от DI. Так что вы можете сделать, чтобы получить текущего поставщика услуг из HttpContext, переданного в ваш маршрут, через context.RequestServices. Но обратите внимание, что контекст действия недоступен но во время маршрутизации он определяется только после запуска выбора действия и выбрал действие (которое происходит после маршрутизации). –
Возможно, было бы интересно понять, что вы на самом деле пытаетесь Чтобы достичь этого, здесь может возникнуть совершенно другой вопрос. –