Передайте данные в промежуточное ПО дальше по цепочке

Когда я регистрирую промежуточное ПО как часть конвейера запросов, как я передаю данные через цепочку промежуточного ПО? (в конечном счете, доступно в действии контроллера MVC)

Например, я реализовал пользовательское промежуточное программное обеспечение для аутентификации моих запросов, но как я могу передать данные аутентификации (например, результат аутентификации и дополнительные данные) по цепочке промежуточного программного обеспечения - в конечном итоге, желая получить доступ к данным из действия контроллера MVC а также в настраиваемом фильтре действий MVC для ограничения доступа на основе результатов аутентификации.

Могу ли я где-нибудь хранить пользовательские данные для каждого запроса и обращаться к ним позже в цепочке запросов?

2 ответа

Решение

Вы можете использовать HttpContext.Items сбор для хранения данных за время существования запроса. Его основной сценарий использования - передача данных вокруг компонентов (например, промежуточного программного обеспечения и контроллеров). Добавлять и читать элементы легко:

Написать:

context.Items["AuthData"] = authData;

Читать:

var authData = (AuthData)context.Items["AuthData"];

См. ASP.NET документы для получения дополнительной информации.

Вы можете хранить пользовательские данные в объекте IOwinContext. Доступ к объекту IOwinContext можно получить из функции Invoke вашего промежуточного программного обеспечения.

Задавать

context.Set<T>("key", obj);

Получить

var obj = context.Get<T>("key");
Другие вопросы по тегам