Pregunta Cambie el encabezado de solicitud ASP MVC por defecto para agregar sus propios valores


Intento cambiar todos mis encabezados de respuesta HTTP ASP MVC para tener otro valor de forma predeterminada para implementar el descubrimiento automático de Pingback en mi aplicación de blog.

El encabezado predeterminado (en Cassini) es:

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

y quiero un valor agregado adicional:

X-Pingback: http://localhost:4912/pingback/xmlrpcserver

Busqué en Google un poco y encontré una solución neet: -- derivar de ActionFilterAttribute y anular el OnResultExecuted método:

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);
        }

    }

Y luego simplemente puse el atributo en mis métodos de Controladores:

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

Cuando conecto la aplicación obtengo el siguiente error: enter image description here

¿Algunas ideas?


9
2018-04-20 22:56


origen


Respuestas:


Esto puede funcionar o no (obviamente, si no lo hago, eliminaré la respuesta para futuros usuarios). Parece de la excepción Operation is not supported by this platform, que muchos Cassini no admiten encabezados personalizados (lo que sería bastante extraño, pero una posibilidad). Lo que sugeriría es asegurarse de que está usando Visual Studio 2010 SP1, luego instala IIS Express (que es una actualización de Cassini y se parece mucho más a IIS real), y luego cambie su proyecto para usar IIS Express y vea si obtiene la misma excepción.

Switching from Cassini to IIS Express

Además, es posible que desee revisar ¿Por qué HttpCacheability.Private suprime ETags? ya que también puede darte una solución alternativa.


1
2018-04-20 23:24



Sé que esta publicación es antigua ... pero quería señalar que, si bien OnResultExecuting es el método adecuado para hacerlo, la publicación original muestra que estaba intentando agregar encabezados a la solicitud. Uno no simplemente agrega encabezados a una solicitud y espera que aparezcan en la respuesta. ;-)

Además, la forma correcta de agregar encabezados a una respuesta ... que también funciona en Cassini ... es usar lo siguiente:

filterContext.HttpContext.Response.AddHeader("X-My-Request-Header", "works in cassini");

5
2018-03-01 19:21



Creo que su problema puede ser simplemente que está tratando de modificar los encabezados demasiado tarde, ya que lo está haciendo en OnResultExecuted. Intenta anular OnResultExecuting en lugar.

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


3
2018-04-21 00:54