HttpContext.GetService в моно - PullRequest
       10

HttpContext.GetService в моно

0 голосов
/ 12 февраля 2012

У меня есть следующий код (поднял с здесь ), и я пытаюсь запустить его на сервере Linux с моно 2.10.5.

private static HttpContext GetCurrentContext(ControllerContext context) {
    var currentApplication = (HttpApplication)context.HttpContext.GetService(typeof(HttpApplication));
    if (currentApplication == null) {
        throw new NullReferenceException("currentApplication");
    }

    return currentApplication.Context;
}

При работе в режиме моно я получаю следующее исключение, которое достаточно просто:

System.NotImplementedException: The requested feature is not
implemented.   at System.Web.HttpContextWrapper.GetService
(System.Type serviceType) [0x00000] in <filename unknown>:0

Есть ли известный обходной путь, который я могу использовать для достижения того же результата на моно?

1 Ответ

3 голосов
/ 12 февраля 2012

Не уверен насчет метода GetService в Mono, но код, который вы подняли , можно сократить следующим образом:

private static HttpContextBase GetCurrentContext(ControllerContext context) {
    return context.HttpContext;
}

На самом деле вам не нужно проходить черезПриложение для того, чтобы получить HttpContext, когда у вас есть прямой доступ к нему.Я также изменил тип возвращаемого значения на HttpContextBase вместо HttpContext, потому что в ASP.NET MVC рекомендуется всегда работать с абстракциями.Это делает ваш код более слабо связанным и проверяемым модулем.

Или, если по какой-то неизвестной мне причине вы хотите работать с фактическим HttpContext (не знаю, почему кто-то хотел бы привязать к нему свой код)можно попробовать следующее:

private static HttpContext GetCurrentContext(ControllerContext context) {
    return context.HttpContext.ApplicationInstance.Context;
}

Но, как вы можете видеть в обоих случаях, существование этого GetCurrentContext статического метода становится весьма сомнительным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...