2012-04-20 12 views
9

私のブログアプリケーションでPingback自動検出を実装するために、すべてのASP MVC HTTP応答ヘッダーをデフォルトで別の値に変更しようとしています。 (カッシーニ上)デフォルトのASP MVCリクエストヘッダーを変更して独自の値を追加する

デフォルトのヘッダーは次のとおりです。

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 

と私は余分な値が追加したい:

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

は、私は少しググとNEETソリューションを発見した: を - にActionFilterAttributeから派生し、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); 
     } 

    } 

そして、単純に私は私のコントローラメソッドの属性置く: enter image description here

任意のアイデア:私は次のエラーを取得するアプリをラントとき

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

を?

+1

あなたはIISExpress代わりにカッシーニを試してみましたか? –

+0

@dtryonいいえ、私は今それを試してみましょう –

+0

それは実際にはカッシーニからのエラーです;) –

答えて

1

これは機能しない場合があります(明らかにそうでない場合は、今後のユーザーのために回答を削除します)。 Operation is not supported by this platformという例外から、カッシーニはカスタムヘッダーをサポートしていないようです(これはかなり奇妙ですが、可能性があります)。私がお勧めするのはVisual Studio 2010 SP1を使用していることを確認し、IIS Express(これはCassiniへのアップグレードであり、本当のIISのようなものです)をインストールし、IIS Expressを使用するようにプロジェクトを切り替え、同じ例外が発生するかどうかを確認します。

Switching from Cassini to IIS Express

また、あなたはそれはまた、あなたの代替ソリューションを与える可能性としてWhy does HttpCacheability.Private suppress ETags?を確認することをお勧めします。

+0

ありがとうErik!プラットフォームの問題を回避し、OnResultExecutingを使用するためには、両方ともIIS Expressであったはずです。 –

+0

これは実際に問題を解決しましたか? –

+0

はい、カッシーニがここに非難されたようです。他のイベントを使用するように提案されたものは、今でも同様の "プラットフォーム"エラーを試みたばかりの –

3

私はあなたの問題が単純にあなたがOnResultExecutedでそれをやっているので、あなたが遅すぎてヘッダーを修正しようとしていると思うかもしれないと信じています。代わりにOnResultExecutingを上書きしてみてください。

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

+0

を試してみました。私はiis express a go –

+0

をあなたに与えるでしょう。それはOnResultExecutingされている必要があり、両方のIISを表現する! –

5

私はこの記事が古いです知っている...しかし、OnResultExecutingからこれを実行する適切な方法でありながら、オリジナルのポストは、彼が要求にヘッダを追加しようとしていたことを示していることを指摘したかったです。リクエストにヘッダーを追加するだけではなく、レスポンスにヘッダーが表示されることを期待しています。 ;-)

また、応答...また、カッシーニで働くにヘッダを追加するための適切な方法...は、次を使用することです:

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

質問は、レスポンスではなくリクエストにヘッダーを追加することに言及しています。 – Elliveny

+1

実際にEllivenyは、質問の最初の行で、リクエストヘッダーではなくレスポンスヘッダーを変更しようとしていると述べています。彼の例は間違って要求ヘッダーを変更しようとしていました。 –

関連する問題