Как получить доступ к текущему объекту HttpRequestMessage глобально?

У меня есть метод, который создает HttpResponseMessage, содержащий объект Error, который будет возвращен на основе текущего средства форматирования типа носителя запроса.

В настоящее время я жестко запрограммировал XmlMediaTypeFormatter, но яЯ хотел бы иметь возможность найти текущий запрос MediaTypeFormatter во время выполнения, но я неУ меня нет доступа к текущему объекту запроса, так как мой код ниже существует в отдельной библиотеке классов.

private HttpResponseMessage Create(HttpStatusCode statusCode, string errorCode, string errorMessage)
{
    var result = new HttpResponseMessage(statusCode)
        {
            Content = new ObjectContent(new Error()
            {
                Code = errorCode,
                Message = errorMessage
            }, new XmlMediaTypeFormatter())
        };
    return result;
}

Как получить доступ к текущему объекту HttpRequestMessage глобально? что-то вроде HttpContext.Current.Request

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

 polkduran21 мая 2013 г., 15:54
Почему Дон'Вы передаетеHttpRequestMessage на вашXmlMediaTypeFormatter? если вы говорите, что ваш форматер находится в другой библиотеке, было бы лучше не связывать его с вашим приложением.
 The Light22 мая 2013 г., 17:57
Я наконец передал Запрос, поскольку не было лучшего решения.
 The Light21 мая 2013 г., 17:07
спасибо яЯ не использую никакой пользовательский форматтер. Я надеялся, что смогу избежать передачи свойства запроса контроллера.

Ответы на вопрос(2)

Почему бы не сделать то, что команда Web API сделала со своим методом CreateResponse? Сделайте это методом расширения Controller. Таким образом, вы все равно можете хранить код в отдельной библиотеке классов, но ваш метод будет иметь доступ к экземпляру контроллера и, следовательно, ко всей информации о конфигурации.

И на немного другой ноте, я бы посоветовал вам взглянуть на некоторые усилия по стандартизации для ответов об ошибках, а не придумывать свои собственные.

например.:

http://www.mnot.net/blog/2013/05/15/http_problemhttp://tools.ietf.org/html/draft-nottingham-http-problem-03https://github.com/blongden/vnd.error
 The Light22 мая 2013 г., 10:21
хм, как получить экземпляр контроллера потом во время выполнения из отдельного класса? дон»Не думаю, что ваше предложение может быть использовано.
 Ruben Bartelink14 янв. 2017 г., 16:52
Привет, спасибо за этот пост. Можете ли вы предложить обновление на этом расстоянии в отношении того, получил ли тяга и / или ли этобыла вытеснена как идея (или чем-то еще)?

Это'Это не невозможно, как я недавно узнал. Это'фактически добавляется в свойство Items текущего HttpContext (если он есть) = [

HttpRequestMessage httpRequestMessage = HttpContext.Current.Items["MS_HttpRequestMessage"] as HttpRequestMessage

Редактировать:

Это как в WebAPI v2. Я не могу быть уверен в предыдущих версиях.

 dariusc07 авг. 2017 г., 08:06
@MehdiDehghani 4 года спустя и на другой платформет работаешь? Пожалуйста скажите
 Mehdi Dehghani07 авг. 2017 г., 08:19
@dariusc AsDNN 7.x использованиеWebApi ссылкав моем проекте я используюWebApi а также мне нужен доступ кHttpRequestMessage object globallyЯ использовал ваше решение, и оно неДля работы я написал здесь комментарий, чтобы помочь другим людям, у которых может возникнуть тот же вопрос, что и у меня.
 RB.07 июл. 2015 г., 15:56
Также обратите внимание, что это вряд ли будет работать в автономной среде (например, если вы используете OWIN или аналогичный), как выиграл HttpContext.Current 'не будет установлен.
 dariusc14 окт. 2014 г., 15:59
@Magrangs, если вы используете WebAPI 2, тогда данормально использовать. ASP pipleline хранит объект сообщения в текущем httpcontext. Вы можете отладить сеанс самостоятельно и проверить различные ключи вHttpContext.Current.Items, Просто обратите внимание, что это может измениться в будущих версиях WebAPI
 SeriousM29 нояб. 2013 г., 13:24
Это'не в WebAPI v1.
 Mehdi Dehghani07 авг. 2017 г., 07:50
Безразлично»работает в DNN 7.x
 Magrangs09 окт. 2014 г., 22:27
Это нормально для использования? Мне смешно, но я могуобъяснить почему ...
 l--''''''---------''''''''''''27 июл. 2017 г., 21:47
@RB. Как бы вы сделали это в собственной среде?

Ваш ответ на вопрос