更改默认的ASP MVC请求标头以添加您自己的值

Ale*_*eta 9 c# asp.net-mvc http-headers

我试图将我的所有ASP MVC HTTP响应标头更改为默认情况下具有另一个值,以便在我的博客应用程序中实现Pingback自动发现.

默认标头(在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
Run Code Online (Sandbox Code Playgroud)

我想要一个额外的增值:

X-Pingback: http://localhost:4912/pingback/xmlrpcserver
Run Code Online (Sandbox Code Playgroud)

我已经google了一下,找到了一个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);
        }

    }
Run Code Online (Sandbox Code Playgroud)

然后我只是将属性放在我的Controllers方法上:

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

当我破坏应用程序时,我收到以下错误: 在此输入图像描述

有任何想法吗?

Joe*_*der 5

我知道这篇文章很老......但是想指出虽然OnResultExecuting是正确的方法,但原始帖子显示他正在尝试向请求添加标题.一个不是简单地向请求添加标头并期望它们出现在响应中.;-)

此外,将标题添加到响应中的正确方法...也适用于Cassini ...是使用以下内容:

filterContext.HttpContext.Response.AddHeader("X-My-Request-Header", "works in cassini");
Run Code Online (Sandbox Code Playgroud)

  • 请注意,问题是将标头添加到请求中,而不是响应. (2认同)

Eri*_*ips 2

这可能有效,也可能无效(显然,如果无效,我将删除未来用户的答案)。从例外情况来看Operation is not supported by this platform,卡西尼号似乎不支持自定义标头(这很奇怪,但有可能)。我的建议是确保您使用的是Visual Studio 2010 SP1,然后安装IIS Express(这是 Cassini 的升级版,更像真正的 IIS),然后切换您的项目以使用 IIS Express 并查看是否得到同样的例外。

从 Cassini 切换到 IIS Express

此外,您可能想查看为什么 HttpCacheability.Private 抑制 ETags?因为它也可能为您提供替代解决方案。