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)
当我破坏应用程序时,我收到以下错误:

有任何想法吗?
我知道这篇文章很老......但是想指出虽然OnResultExecuting是正确的方法,但原始帖子显示他正在尝试向请求添加标题.一个不是简单地向请求添加标头并期望它们出现在响应中.;-)
此外,将标题添加到响应中的正确方法...也适用于Cassini ...是使用以下内容:
filterContext.HttpContext.Response.AddHeader("X-My-Request-Header", "works in cassini");
Run Code Online (Sandbox Code Playgroud)
这可能有效,也可能无效(显然,如果无效,我将删除未来用户的答案)。从例外情况来看Operation is not supported by this platform,卡西尼号似乎不支持自定义标头(这很奇怪,但有可能)。我的建议是确保您使用的是Visual Studio 2010 SP1,然后安装IIS Express(这是 Cassini 的升级版,更像真正的 IIS),然后切换您的项目以使用 IIS Express 并查看是否得到同样的例外。

此外,您可能想查看为什么 HttpCacheability.Private 抑制 ETags?因为它也可能为您提供替代解决方案。
| 归档时间: |
|
| 查看次数: |
11703 次 |
| 最近记录: |