Ссылка на этот вопрос и конкретно этот ответ , за который проголосовали, но не отметили. Мне не нравится помеченный ответ, потому что мне нужно провести модульное тестирование контроллера.
Помещение их в HttpRequest и HttpResponse во время Application_BeginRequest немного пахнет, но я имею дело с библиотекой ComponentSpace SAML 2 , которая принимает эти типы в качестве аргументов метода. Нет ли лучшего способа получить доступ к ним в MVC модульно-тестируемым способом?
Вот с чем я сейчас работаю. Может реорганизовать .Items в метод расширения для инкапсуляции приведенной и магической строки, но это основная идея:
Global.asax:
protected void Application_BeginRequest()
{
// put the raw request in context items for use by ComponentSpace SAML lib
Context.Items["HttpRequest"] = Context.Request;
Context.Items["HttpResponse"] = Context.Response;
}
в методах обслуживания:
// HttpContext is an instance of HttpContextBase
ServiceProvider.SendAuthnRequestByHTTPPost(
HttpContext.Items["HttpResponse"] as HttpResponse,
authnRequest.Destination, authnRequestXml, relayState);
ServiceProvider.ReceiveSAMLResponseByHTTPPost(
HttpContext.Items["HttpRequest"] as HttpRequest,
out samlResponseXml, out relayState);