2015-10-19 33 views
5

我試圖從HttpResponseHeaders中刪除特定的Set-Cookie標頭OnActionExecuted方法ActionFilter從WebApi中刪除HttpRequestHeaders中的特定cookie的方法

我有幾個問題與:

  1. 我不能看到羅列頭的方式。即使我在調試器中看到標題,該集合始終爲空 。
  2. 因爲我不能 枚舉,我不能刪除特定的報頭。我只能用相同的密鑰刪除所有 頭,但Set-Cookie可以有多個 條目。

目前我刪除所有cookie,但是這不是我想要的。

public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) 
{     
    HttpResponseHeaders headers = actionExecutedContext.Response.Headers; 
    IEnumerable<string> values; 
    if (headers.TryGetValues("Set-Cookie", out values)) 
    { 
     actionExecutedContext.Response.Headers.Remove("Set-Cookie"); 
    } 

    base.OnActionExecuted(actionExecutedContext); 
} 

回答

4

link

您不能直接刪除用戶計算機上的cookie。但是,您可以通過將Cookie的到期日期設置爲過去的日期來指示用戶的瀏覽器刪除Cookie。當用戶下次向設置cookie的域或路徑中的頁面發出請求時,瀏覽器將確定該cookie已過期並將其刪除。

那麼,如何刪除/在行動過濾級別刪除ASP.NET網頁API的cookie,只是儘量的cookie有效期設置爲一個過去的日期:

public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) 
{ 
    var response = actionExecutedContext.Response; 
    var request = actionExecutedContext.Request; 

    var currentCookie = request.Headers.GetCookies("yourCookieName").FirstOrDefault(); 
    if (currentCookie != null) 
    { 
     var cookie = new CookieHeaderValue("yourCookieName", "") 
     { 
      Expires = DateTimeOffset.Now.AddDays(-1), 
      Domain = currentCookie.Domain, 
      Path = currentCookie.Path 
     }; 

     response.Headers.AddCookies(new[] { cookie }); 
    } 

    base.OnActionExecuted(actionExecutedContext); 
} 
+0

我不想刪除用戶計算機上的cookie。我只是不想在Web-Api中將cookie發回給用戶,以防止某些web-api操作滑動到期。所以我想刪除特定的Set-Cookie頭。 – Marcin

+0

好吧,那麼我只是好奇,爲什麼你要做到這一點@Marcin? –

+0

我有web app的內部使用的web應用程序。它用於簡化要求,並獲得返回的格式爲JavaScript責任等。由於我使用窗體身份驗證時,cookie是一段時間後發送,延長到期時間。我的應用程序中有幾個動作會自動在後臺調用。所以我想阻止它們延長Auth cookie的到期時間。 – Marcin