2012-04-20 12 views
9

Estoy intentando cambiar todos mis encabezados de respuesta HTTP ASP MVC para que tengan otro valor predeterminado para implementar el descubrimiento automático de Pingback en la aplicación de mi blog.Cambiar encabezado de solicitud MVC de ASP predeterminado para agregar sus propios valores

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 extra añadido:

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

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

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 pongo el atributo en mis métodos Controladores:

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

Cuando i Runt la aplicación Me sale el siguiente error: enter image description here

¿Alguna idea?

+1

¿Ha intentado IISExpress en lugar de Cassini? –

+0

@dtryon no, lo intentaré ahora y le dejaré saber –

+0

el error fue de hecho de Cassini;) –

Respuesta

1

Esto puede funcionar o no (obviamente, si no lo hago, eliminaré la respuesta para futuros usuarios). Suena como de la excepción Operation is not supported by this platform, que Cassini muchos 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 instale 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 Why does HttpCacheability.Private suppress ETags?, ya que también puede darle una solución alternativa.

+0

gracias Erik! debería haber sido tanto IIS express para evitar el problema de la plataforma, y ​​luego usar OnResultExecuting! –

+0

¿Eso realmente resolvió tu problema? –

+0

sí, parece que Cassini tenía la culpa aquí. y lo que bhamin sugirió para usar el otro evento también resultó ser correcto –

3

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

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

+0

, intenté esto ahora, sigue teniendo el mismo error de "plataforma". le daré iis expresar un ir –

+0

así que tienes razón señor! debería haber sido OnResultExecuting y ambos IIS express! –

5

Sé que este post es viejo ... pero quería señalar que si bien OnResultExecuting es el método adecuado para estar haciendo esto desde el post original muestra que él estaba tratando de 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 añadir cabeceras a una respuesta ... que también trabaja en la Cassini ... es el uso de lo siguiente:

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

Solo para observar que la pregunta se refiere a agregar el encabezado a la Solicitud, no a la Respuesta. – Elliveny

+1

En realidad, Elliveny, la primera línea de la pregunta indica que está tratando de modificar encabezados de respuesta, no solicitar encabezados. Sus ejemplos intentaban incorrectamente modificar los encabezados de solicitud. –

Cuestiones relacionadas