public void ProcessRequest(HttpContext context) { context.PushRewritenUri(); if (string.IsNullOrEmpty(context.Request["p"])) { _params = new Dictionary<string, string>(context.Request.QueryString.Count); //Form params and redirect foreach (var key in context.Request.QueryString.AllKeys) { _params.Add(key, context.Request.QueryString[key]); } //Pack and redirect var uriBuilder = new UriBuilder(context.Request.GetUrlRewriter()); var token = HttpServerUtility.UrlTokenEncode(Encoding.UTF8.GetBytes(new JavaScriptSerializer().Serialize(_params))); uriBuilder.Query = "p=" + token; context.Response.Redirect(uriBuilder.Uri.ToString(), true); } else { _params = ((Dictionary<string, object>)new JavaScriptSerializer().DeserializeObject( Encoding.UTF8.GetString(HttpServerUtility.UrlTokenDecode(context.Request["p"])))).ToDictionary(x => x.Key, y => (string)y.Value); } if (!string.IsNullOrEmpty(Auth)) { try { var profile = ProviderManager.Process(Auth, context, _params); if (profile != null) { SendClientData(context, profile); } } catch (ThreadAbortException) { //Thats is responce ending } catch (Exception ex) { SendClientData(context, LoginProfile.FromError(ex)); } } else { //Render xrds RenderXrds(context); } context.PopRewritenUri(); }