9

我试图将我的所有 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

我想要一个额外的附加值:

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

    }

然后我简单地将属性放在我的 Controllers 方法上:

[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,Cassini 许多不支持自定义标头(这会很奇怪,但有可能)。我的建议是确保您使用的是Visual Studio 2010 SP1,然后安装IIS Express(这是对 Cassini 的升级,更像是真正的 IIS),然后将您的项目切换为使用 IIS Express,看看您是否得到同样的例外。

从 Cassini 切换到 IIS Express

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

于 2012-04-20T23:24:09.170 回答