Измените заголовок запроса ASP MVC по умолчанию, чтобы добавить свои собственные значения

Я пытаюсь изменить все мои заголовки ответа ASP MVC HTTP на другое значение по умолчанию для реализации автоматического обнаружения Pingback в моем приложении блога.

Заголовок по умолчанию (на Кассини):

<code>Cache-Control   private
Connection  Close
Content-Length  20901
Content-Type    text/html; charset=utf-8
Date    Fri, 20 Apr 2012 22:46:11 GMT
Server  ASP.NET Development Server/10.0.0.0
X-AspNet-Version    4.0.30319
X-AspNetMvc-Version 3.0
</code>

и я хочу дополнительную добавленную стоимость:

<code>X-Pingback: http://localhost:4912/pingback/xmlrpcserver
</code>

Я немного погуглил и нашел лучшее решение: - извлечь изActionFilterAttribute и переопределитьOnResultExecuted метод:

<code>public class HttpHeaderAttribute : ActionFilterAttribute
    {

        public string Name { get; set; }
        public string Value { get; set; }

        public HttpHeaderAttribute(string name, string value)
        {
            Name = name;
            Value = value;
        }

        public override void OnResultExecuted(ResultExecutedContext filterContext)
        {
            filterContext.HttpContext.Request.Headers.Add(Name, Value);
            base.OnResultExecuted(filterContext);
        }

    }
</code>

А затем я просто добавляю атрибут в мои методы контроллеров:

<code>[HttpHeader("X-Pingback","http://localhost:4912/pingback/xmlrpcserver")]
        public ActionResult Index()
        {
            var allArticles = _repository.GetPublishedArticles(SortOrder.desc);
            return View(allArticles);
        }
</code>

Когда я запускаю приложение, я получаю следующую ошибку: enter image description here

Есть идеи?

 Joe The Coder01 мар. 2013 г., 20:02
Я единственный, кто ловит, что вы добавляете заголовки к объекту запроса ... а не к ответу?
 Alex Peta21 апр. 2012 г., 13:08
@dtryon Нет, я попробую сейчас и сообщу вам
 Davin Tryon21 апр. 2012 г., 01:25
Вы пробовали IISExpress вместо Cassini?
 Alex Peta01 мар. 2013 г., 20:04
@LostInJavaScriptL, и, наконец, кто-то заметил это :-p. в моем реальном приложении я был на ответ не запрос, но вот опечатка :-p
 Alex Peta21 апр. 2012 г., 14:00
ошибка действительно была от Кассини;)

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

что ваша проблема может заключаться просто в том, что вы пытаетесь изменить заголовки слишком поздно, поскольку вы делаете это вOnResultExecuted, Попробуйте переопределитьOnResultExecuting вместо.

http://msdn.microsoft.com/en-us/library/system.web.mvc.actionfilterattribute.onresultexecuting.aspx

 Alex Peta21 апр. 2012 г., 13:21
так что вы правы, сэр! это должно было быть OnResultExecuting и оба IIS Express!
 Alex Peta21 апр. 2012 г., 13:09
только что попробовал сейчас, все та же "платформа" ошибка. я сделаю это прямо

что этот пост старый ... но хотел отметить, что, хотя OnResultExecuting является подходящим методом для этого, в оригинальном посте показано, что он пытался добавить заголовки к запросу. Нельзя просто добавить заголовки к запросу и ожидать, что они появятся в ответе. ;-)

Кроме того, правильный способ добавить заголовки к ответу ... который также работает в Cassini ... - это использовать следующее:

filterContext.HttpContext.Response.AddHeader("X-My-Request-Header", "works in cassini");
 11 дек. 2018 г., 17:33
Для MVC Core 2.x метод теперь таков:filterContext.HttpContext.Response.Headers.Add().
 23 янв. 2015 г., 09:48
Просто отметим, что вопрос касается добавления заголовка в запрос, а не ответа.
 08 апр. 2015 г., 23:20
Фактически, Элливени, первая строка вопроса, утверждает, что он пытается изменить заголовки ответа, а не запрашивать заголовки. Его примеры неправильно пытались изменить заголовки запроса.
Решение Вопроса

если оно не удалит ответ для будущих пользователей). Это звучит как из исключенияOperation is not supported by this platformКассини многие не поддерживают пользовательские заголовки (что было бы довольно странно, но возможно). Я хотел бы убедиться, что вы используетеVisual Studio 2010 SP1затем установитеIIS Express (который является обновлением до Cassini и намного больше похож на настоящий IIS), а затем переключите свой проект на использование IIS Express и посмотрите, получите ли вы то же исключение.

Switching from Cassini to IIS Express

Кроме того, вы можете рассмотретьПочему HttpCacheability.Private подавляет ETag? как это может также дать вам альтернативное решение.

 21 апр. 2012 г., 19:53
Это действительно решило вашу проблему?
 Alex Peta21 апр. 2012 г., 13:22
спасибо Эрик! чтобы избежать проблемы с платформой, нужно было использовать как IIS express, так и использовать OnResultExecuting!
 Alex Peta23 апр. 2012 г., 10:38
да, похоже, что здесь виновата Кассини. и то, что Бхамин предложил использовать другое событие, также оказалось правильным

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