C# 更改默认ASP MVC请求标头以添加您自己的值
我试图更改我的所有ASP MVC HTTP响应头,使其在默认情况下具有另一个值,以便在我的博客应用程序中实现Pingback自动发现 默认标题(在Cassini上)为: 我想要一个额外的附加值: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
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");