我有一个要求,我们的网站可以生成一个跟踪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,会话等)?我需要告诉网络应用将Cookie传递给api调用吗?
答案 0 :(得分:0)
您可以通过添加带有跟踪ID的请求标头,在每个请求中从webapp向api重新发出跟踪ID。
在网络应用中,跟踪ID可以保存在Cookie或本地存储中。
要在标头中添加跟踪ID,请在每次调用api时使用httpinterceptor。
@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);
}
}