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

C# 更改默认ASP MVC请求标头以添加您自己的值,c#,asp.net-mvc,http-headers,C#,Asp.net Mvc,Http Headers,我试图更改我的所有ASP MVC HTTP响应头,使其在默认情况下具有另一个值,以便在我的博客应用程序中实现Pingback自动发现 默认标题(在Cassini上)为: 我想要一个额外的附加值: X-Pingback: http://localhost:4912/pingback/xmlrpcserver 我在谷歌上搜索了一下,找到了一个neet解决方案: --要从ActionFilterAttribute派生并覆盖OnResultExecuted方法: public class HttpHe

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

默认标题(在Cassini上)为:

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

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

    }
然后简单地将属性放在我的控制器方法上:

[HttpHeader("X-Pingback","http://localhost:4912/pingback/xmlrpcserver")]
        public ActionResult Index()
        {
            var allArticles = _repository.GetPublishedArticles(SortOrder.desc);
            return View(allArticles);
        }
运行应用程序时,出现以下错误:

有什么想法吗?

这可能行得通,也可能行不通(显然,如果不行,我会删除答案供未来用户使用)。从这个平台不支持的异常
操作来看,Cassini many不支持自定义头(这很奇怪,但有可能)。我的建议是,确保您正在使用,然后安装(这是对Cassini的升级,更像是真正的IIS),然后将您的项目切换到使用IIS Express,看看是否会出现相同的异常


此外,您可能需要查看,因为它也可能为您提供一个替代解决方案。

我认为您的问题可能只是因为您试图修改标题太晚,因为您是在
OnResultExecuted
中进行的。请尝试在ResultExecuting上重写


我知道这篇文章很老……但我想指出,虽然OnResultExecuting是执行此操作的正确方法,但原始文章显示,他试图向请求添加标题。人们不会简单地将头添加到请求中,并期望它们出现在响应中。;-)

此外,向响应添加标题的正确方法…在Cassini中也有效…是使用以下内容:

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

你试过IISExpress而不是卡西尼号吗?@dtryon不,我现在就试,我会让你知道这确实是卡西尼号的错误;)我是唯一一个发现你在向请求对象添加头…而不是响应的人吗?@LostInJavaScriptLand所以终于有人发现了:-p。在我真正的应用程序中,我收到的是响应而不是请求,但这里有一个输入错误:-现在刚刚尝试了这个,仍然是相同的“平台”错误。我会给你一个goso你说得对,先生!它应该是OnResultExecuting和IIS express!谢谢你,埃里克!它应该是IIS express以避免平台问题,然后使用OnResultExecuting!是的,看来卡西尼号是罪魁祸首。bhamin建议使用的另一个事件也被证明是正确的,只是要注意,这个问题指的是将头添加到请求中,而不是响应中。实际上,Elliveny,问题的第一行表示他正在尝试修改响应头,而不是请求头。他的示例错误地试图修改请求头。对于MVC Core 2.x,现在的方法是:filterContext.HttpContext.Response.headers.Add()。
filterContext.HttpContext.Response.AddHeader("X-My-Request-Header", "works in cassini");