2015-10-19 16 views
5

Tôi đang cố gắng xóa tiêu đề cụ thể Set-Cookie từ HttpResponseHeaders trong phương thức OnActionExecutedActionFilter.Cách để xóa cookie cụ thể khỏi HttpRequestHeaders trong WebApi

Tôi đang gặp vài vấn đề với điều đó:

  1. Tôi không thể nhìn thấy con đường của tiêu đề enumerate. Bộ sưu tập luôn là trống, ngay cả khi tôi thấy tiêu đề trong trình gỡ lỗi.
  2. Vì tôi không thể liệt kê, tôi không thể xóa tiêu đề cụ thể. Tôi chỉ có thể xóa tất cả các tiêu đề có cùng khóa, nhưng Set-Cookie có thể có nhiều mục nhập .

Hiện tại tôi đang xóa tất cả cookie, nhưng đây không phải là những gì tôi muốn.

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

Trả lời

4

Từ link:

Bạn có thể không trực tiếp xóa cookie trên máy tính của người dùng. Tuy nhiên, bạn có thể trực tiếp trình duyệt của người dùng xóa cookie bằng cách đặt ngày hết hạn của cookie thành ngày trong quá khứ. Lần tới khi người dùng thực hiện yêu cầu cho trang trong tên miền hoặc đường dẫn đã đặt cookie, trình duyệt sẽ xác định rằng cookie đã hết hạn và xóa cookie đó.

Vì vậy, làm thế nào để loại bỏ/xóa cookie trong ASP.NET Web Api ở mức lọc hành động, chỉ cần cố gắng thiết lập ngày hết hạn của cookie đến ngày trong quá khứ:

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

Tôi không muốn xóa cookie trên máy tính người dùng. Tôi chỉ không muốn gửi cookie trở lại người dùng trong Web-Api, để ngăn chặn hết hạn trên một số thao tác trên web-api. Vì vậy, tôi muốn loại bỏ tiêu đề Set-Cookie cụ thể. – Marcin

+0

Ok, sau đó tôi chỉ tò mò tại sao bạn phải làm điều này @Marcin? –

+0

Tôi có ứng dụng web với việc sử dụng nội bộ api trên web. Nó được sử dụng để đơn giản hóa yêu cầu và nhận trách nhiệm về định dạng trả về cho javascript, v.v. Bởi vì tôi đang sử dụng xác thực biểu mẫu, cookie được gửi sau một thời gian, để kéo dài thời gian hết hạn. Có vài hành động trong ứng dụng của tôi, được gọi là nền, tự động. Vì vậy, tôi muốn ngăn họ kéo dài thời gian hết hạn của cookie Auth. – Marcin

Các vấn đề liên quan