C# 从Web API 2响应中删除Cookie
我正在尝试执行一个经过身份验证的web api请求,该请求不会重置身份验证cookie超时。在MVC世界中,我将通过从响应中删除FormsAuthenticationCookie来实现这一点:C# 从Web API 2响应中删除Cookie,c#,asp.net-web-api,asp.net-web-api2,C#,Asp.net Web Api,Asp.net Web Api2,我正在尝试执行一个经过身份验证的web api请求,该请求不会重置身份验证cookie超时。在MVC世界中,我将通过从响应中删除FormsAuthenticationCookie来实现这一点: Response.Cookies.Remove(System.Web.Security.FormsAuthentication.FormsCookieName); 在WebAPI2中,我编写了一个自定义IHttpActionResult,并且正在从响应中删除Set-Cookie头。但是,这并不是删除标
Response.Cookies.Remove(System.Web.Security.FormsAuthentication.FormsCookieName);
在WebAPI2中,我编写了一个自定义IHttpActionResult,并且正在从响应中删除Set-Cookie头。但是,这并不是删除标头,因为在为使用此操作结果的请求更新auth Cookie时,我仍然可以看到Set Cookie标头
以下是自定义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);
}
}
公共类NoAuthResetResult:IHttpActionResult其中T:class
{
私有HttpRequestMessage\u请求;
私人信托机构;
公共非授权重置结果(HttpRequestMessage请求,T正文)
{
_请求=请求;
_身体=身体;
}
公共字符串消息{get;private set;}
公共HttpRequestMessage请求{get;private set;}
公共任务执行同步(CancellationToken CancellationToken)
{
var msg=\u request.CreateResponse(\u body);
msg.Headers.Remove(“设置Cookie”);
返回Task.FromResult(msg);
}
}
如何在Web API 2中编辑响应头,因为这不起作用。如果您使用的是Web API 2,那么您可能正在使用OWIN Cookie中间件。您所描述的内容听起来像是要禁用auth cookie上的滑动到期窗口 在标准Web 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
});
Global.asax可以删除应用程序请求事件中的Cookie。您可以设置一个变量,稍后由应用程序_EndRequest提取 第一步。创建在上下文中设置变量的操作筛选器。项:
public class NoResponseCookieAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
System.Web.HttpContext.Current.Items.Add("remove-auth-cookie", "true");
}
}
第二步。在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);
}
}
第三步。使用自定义筛选器装饰您的web api操作:
[NoResponseCookie]
public IHttpActionResult GetTypes()
{
// your code here
}
我需要为一个特定的请求这样做。不是全局Web API设置。