2014-02-07 3 views
4

Я пытаюсь выполнить аутентифицированный запрос веб-api, который не сбрасывает тайм-аут cookie проверки подлинности. В MVC мире я бы сделать это, удалив FormsAuthenication печенье из Быстродействие:Удалить Cookie из Web API 2 Ответ

Response.Cookies.Remove(System.Web.Security.FormsAuthentication.FormsCookieName); 

В Web API 2 я написал пользовательские IHttpActionResult, и я удаление заголовка Set-Cookie от ответа. Это, однако, не удаление заголовка, поскольку я все еще вижу заголовок Set-Cookie, когда файл cookie auth обновляется для запросов, которые используют этот результат.

Вот обычай IHttpActionResult:

public class NonAuthResetResult<T> : IHttpActionResult where T: class 
{ 
    private HttpRequestMessage _request; 
    private T _body; 

    public NonAuthResetResult(HttpRequestMessage request, T body) 
    { 
     _request = request; 
     _body = body; 
    } 

    public string Message { get; private set; } 

    public HttpRequestMessage Request { get; private set; } 

    public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken) 
    { 
     var msg = _request.CreateResponse(_body); 
     msg.Headers.Remove("Set-Cookie"); 
     return Task.FromResult(msg); 
    } 
} 

Как изменить заголовок ответа в Web API 2, потому что это не работает.

ответ

7

Global.asax может удалить куки в случае Application_EndRequest. И вы можете установить переменную, которая будет позже подхвачена Application_EndRequest.

Шаг 1. Создайте действие фильтра, который устанавливает переменную в Context.Items:

public class NoResponseCookieAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) 
    { 
     System.Web.HttpContext.Current.Items.Add("remove-auth-cookie", "true"); 
    } 
} 

Шаг 2. Handle событие Application_EndRequest в файле global.asax. Если переменная с шага 1 присутствует, удалите файл cookie.

protected void Application_EndRequest() 
{ 
    if (HttpContext.Current.Items["remove-auth-cookie"] != null) 
    { 
     Context.Response.Cookies.Remove(System.Web.Security.FormsAuthentication.FormsCookieName); 
    } 
} 

Шага 3. Украсьте ваше веб-действия API с пользовательским фильтром:

[NoResponseCookie] 
public IHttpActionResult GetTypes() 
{ 
    // your code here 
} 
1

Если вы используете Web API 2, вы, вероятно, используете промежуточное программное обеспечение OWIN Cookie. То, что вы описываете, похоже на то, что вы хотите отключить окно с истечением срока действия в файле cookie auth.

В стандартном шаблоне веб-API вы должны иметь App_Start/Startup.Auth.cs. В нем вы найдете линию ...

app.UseCookieAuthentication(new CookieAuthenticationOptions()); 

Это позволяет и настраивает промежуточное ПО cookie. Вы можете передать некоторые опции, чтобы изменить окно ожидания и отключить раздвижными экспирации ...

app.UseCookieAuthentication(new CookieAuthenticationOptions 
{ 
    SlidingExpiration = false, 
    ExpireTimeSpan = new TimeSpan(1, 0, 0) // 1 hour 
}); 
+1

мне нужно сделать это для конкретного запроса. Не глобальная настройка веб-API. – LRFalk01

 Смежные вопросы

  • Нет связанных вопросов^_^