2012-04-20 13 views
9

Tüm ASP MVC HTTP yanıt başlıklarımı, blog uygulamamda Pingback otomatik bulma özelliğini uygulamak için varsayılan olarak başka bir değere sahip olmaya çalışıyorum. (Cassini)Varsayılan değerlerini değiştirmek için ASP MVC Request Header'ı değiştirin

varsayılan başlığıdır:

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 

ve ben ekstra bir katma değer istiyorum:

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

Biraz googled ve bir neet çözüm bulduk: - için ActionFilterAttribute türetmek ve geçersiz OnResultExecuted yöntemi:

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

    } 

Ve sonra sadece benim Kontrolörler yöntemleri niteliğini koydu: enter image description here

Herhangi bir fikir: i aşağıdaki hatayı alıyorum uygulamayı kocakarı zaman

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

?

+1

yerine Cassini IISExpress denediniz: ;-)

Ayrıca da ... Cassini çalışan bir yanıta başlıkları eklemek için uygun yolu ... Aşağıdaki kullanmaktır? –

+0

@dtryon nope, şimdi bunu deneyeceğim ve gerçekten de Cassini'den gelen hatayı –

+0

bilmenizi sağlayacak;) –

cevap

1

Bu, çalışmayabilir veya çalışmayabilir (açıkçası gelecekteki kullanıcılar için yanıtı silmezlerse). Bu Cassini birçok özel üstbilgileri (bu oldukça garip, ama bir olasılık olurdu) desteklemediği istisna gibi geliyor. Öneririm, Visual Studio 2010 SP1'u kullandığınızdan emin olmak, daha sonra IIS Express'u (bu, Cassini'ye yükseltmek ve daha çok gerçek IIS gibi) yüklemek ve daha sonra projenizi IIS Express'i kullanacak şekilde değiştirip aynı özel durumu alıp almadığınızı kontrol etmektir.

Switching from Cassini to IIS Express

Ayrıca, aynı zamanda size alternatif bir çözüm verebilir olarak Why does HttpCacheability.Private suppress ETags? gözden geçirmek isteyebilirsiniz.

+0

teşekkürler Erik! Platform sorunundan kaçınmak için hem IIS ifadesi olmalı hem de OnResultExecuting kullanın! –

+0

Sorununuzu çözdünüz mü? –

+0

evet, Cassini'nin buraya suçlanacakmış gibi görünüyor. ve bhamin diğer olayın kullanımı için önerdiği gibi –

3

Sorununuzun yalnızca OnResultExecuted içinde yaptığınız için çok geç başlıkları değiştirmeye çalıştığınız gibi olabileceğini düşünüyorum. Bunun yerine OnResultExecuting'u geçersiz kılmayı deneyin.

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

+0

da şimdi bunu denedi, hala aynı "platform" hatası. iis eksprese bir go –

+0

vereceğim, böylece haklısınız! OnResultExecuting olmalı ve her iki IIS ifade! –

5

Bu yazı eski biliyorum ... ama OnResultExecuting bu yapıyor gibi uygun yöntem ise, orijinal yayında o isteğine başlıkları eklemek çalıştığını gösterir işaret etmek istedim . Kişi sadece bir isteği üstbilgileri eklemez ve yanıtta görünmesini bekler.

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

Sadece sorunun cevabın başlığı değil, İstek'e eklenmesi anlamına geldiğine dikkat edin. – Elliveny

+1

Aslında Elliveny, sorunun ilk satırı, başlıkları istemeyen, yanıt başlıklarını değiştirmeye çalıştığını belirtiyor. Örnekleri yanlış bir şekilde istek başlıklarını değiştirmeye çalışıyordu. –

İlgili konular