2015-10-19 5 views
5

Próbuję usunąć konkretny nagłówek Set-Cookie z HttpResponseHeaders w metodzie OnActionExecuted z dnia ActionFilter.Sposób usunięcia określonego pliku cookie z HttpRequestHeaders w WebApi

Mam kilka problemów z tym:

  1. Nie widzę sposobu nagłówków wyliczyć. Kolekcja jest zawsze pusta , nawet jeśli widzę nagłówki w debugerze.
  2. Ponieważ nie mogę wymienić , nie można usunąć określonego nagłówka. Mogę tylko usunąć wszystkie nagłówki z tym samym kluczem, ale Set-Cookie może zawierać wiele wpisów .

Obecnie usuwam wszystkie pliki cookie, ale nie jest to to, czego chcę.

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

Odpowiedz

4

Z link:

Nie można bezpośrednio usunąć plik cookie na komputerze użytkownika. Możesz jednak skierować przeglądarkę użytkownika, aby usunąć plik cookie, ustawiając datę ważności pliku cookie na datę wcześniejszą. Następnym razem, gdy użytkownik wyśle ​​żądanie do strony w domenie lub ścieżce, która ustawi plik cookie, przeglądarka ustali, że plik cookie wygasł i go usunął.

Tak, jak usunąć/skasować cookie w ASP.NET Web API na poziomie działania filtra, po prostu spróbuj ustawić datę wygaśnięcia pliku cookie do przeszłych data:

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

ja nie chce usuń plik cookie na komputerze użytkownika. Po prostu nie chcę wysyłać ciasteczek z powrotem do użytkownika w Web-Api, aby zapobiec wyślizgnięciu się z niektórych działań web-api. Dlatego chcę usunąć konkretny nagłówek Set-Cookie. – Marcin

+0

OK, to jestem po prostu ciekawy, dlaczego musisz to zrobić @Marcin? –

+0

Mam aplikację internetową z wewnętrznym wykorzystaniem interfejsu API. Służy on do uproszczenia żądania i ponoszenia odpowiedzialności za zwracany format do javascript itp. Ponieważ używam uwierzytelniania formularzy, plik cookie jest wysyłany po pewnym czasie, aby wydłużyć czas wygaśnięcia. W mojej aplikacji jest kilka czynności, które są wywoływane w tle automatycznie. Dlatego chcę uniemożliwić im przedłużenie ważności pliku cookie Auth. – Marcin

Powiązane problemy