MVC中的P3P头信息

8

我不确定应该把这个放在哪里,我的Asp.net MVC网站:

HttpContext.Current.Response.AppendHeader("P3P", "CP=\\\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\\\"");

我将其放在了这里:
public static void RegisterRoutes(RouteCollection routes)
{
  HttpContext.Current.Response.AppendHeader("P3P", "CP=\\\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\\\"");
  routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
  routes.MapRoute(
      "Default", // Route name
      "{controller}/{action}/{id}", // URL with parameters
      new { controller = "Account", action = "Logon", id = UrlParameter.Optional }
  );

}

但我回来了

此上下文中未提供响应。

有人知道我应该把它放在哪里吗?


注意:这是对提供的文本的翻译,返回的结果中保留了 HTML 标签。
3个回答

38

你可以将其放入web.config文件中:

  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="P3P" value='CP="CAO PSA OUR"'/>

这样你就不需要把它放在代码中。

查看这个SO回答以了解value的详细信息。


1
非常感谢您,您让我避免了无尽的无意义调试。 - Chorinator
1
@vtortola:谢谢!这让我疯了。非常好的解决方案。 - richb01
2020年,任何现代浏览器都不支持P3P头(https://en.wikipedia.org/wiki/P3P)。 - Jithin Pavithran

9
假设您希望在每个响应中都包含此标题,可以使用以下代码实现:
public class P3PHeaderAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        filterContext.HttpContext.Response.AppendHeader("P3P", "CP=\\\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\\\"");

    }
}

然后将过滤器添加到全局集合中。
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new P3PHeaderAttribute());
    }

这正是我所需要的,但我已经使用了web.config更改。我为你点赞,谢谢! - ErocM

1
你应该创建一个继承 ActionFilter 并重写 OnResultExecuting() 方法以添加该标头的类。
然后,将其添加到全局过滤器集合中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接