处理到 Web API 的会话



我有一个要求,我们的网站可以生成一个跟踪ID,以分发给用户,以跟踪他们如何访问我们的网站。

该网站是一个Angular前端和一个.Net Web Api2后端,它们是同一域的一部分。

我最初的计划是让初始跟踪网址直接转到 api(例如 http://api.mywebsite.com/t/45mg9(,然后返回重定向到相关页面(例如 http://web.mywebsite.com(。

重定向工作正常,但我想跟踪初始跟踪代码,因为用户最初可能没有登录,因此需要保留它直到他们登录。

我试过:

饼干

在重定向消息中,我使用以下方法设置了一个cookie:

var response = new HttpResponseMessage(System.Net.HttpStatusCode.Redirect);
response.Headers.Location = new Uri(tracking.Url);
var cookie = new CookieHeaderValue("tracking", JsonConvert.SerializeObject(tracking))
{
HttpOnly = true,
Path = "/",
Domain = "mywebsite.com",
Expires = DateTimeOffset.UtcNow.AddDays(30)
};
response.Headers.AddCookies(new[] { cookie });
return ResponseMessage(response);

并且可以看到在重定向上设置的cookie,但是当Web应用程序对api进行后续调用时,它就不存在了。

会期

我已经在我的 web api 中启用了会话并设置了值,但它似乎因重定向而丢失。


我想尝试将其保留在 api 中,因为我认为 Web 应用程序不需要知道正在存储的信息,只有 api 感兴趣。

如何持久化发送到 API 的信息(cookie、会话等(?我是否需要告诉 Web 应用将 Cookie 传递给 api 调用?

您可以通过添加带有跟踪 ID 的请求标头,在每个请求中将跟踪 ID 从 webapp 重新发布到 api。

在网络应用中,跟踪 ID 可以保留在 Cookie 或本地存储中。

要在标头中添加跟踪 ID,请对每次调用 API 使用 http拦截器。

@Injectable()
export class MyInterceptor implements HttpInterceptor {
constructor() { }
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
request = request.clone({
setHeaders: {
TrackingId: localStorage.getItem('trackingId')
}
});
return next.handle(request);
}
}

最新更新