9

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

デフォルトのヘッダー (Cassini の場合) は次のとおりです。

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

私は少しグーグルで調べて、きちんとした解決策を見つけました: -- 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);
        }

    }

そして、コントローラーメソッドに属性を配置するだけです:

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

アプリを実行すると、次のエラーが表示されます。 ここに画像の説明を入力

何か案は?

4

3 に答える 3

5

私はこの投稿が古いことを知っています...しかし、OnResultExecuting はこれを実行するための適切な方法ですが、元の投稿は、彼がリクエストにヘッダーを追加しようとしていたことを示しています。単純にヘッダーをリクエストに追加して、それらがレスポンスに表示されることを期待するわけではありません。;-)

また、応答にヘッダーを追加する適切な方法は... Cassiniでも機能します...次を使用することです:

filterContext.HttpContext.Response.AddHeader("X-My-Request-Header", "works in cassini");
于 2013-03-01T19:21:02.493 に答える
3

あなたの問題は、ヘッダーを変更しようとしているのが遅すぎることだと思いますOnResultExecuted. OnResultExecuting代わりにオーバーライドしてみてください。

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

于 2012-04-21T00:54:33.623 に答える
1

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

カッシーニからIISExpressへの切り替え

さらに、HttpCacheability.PrivateがETagを抑制する理由を確認することをお勧めします。それはまたあなたに代替の解決策を与えるかもしれないので。

于 2012-04-20T23:24:09.170 に答える