2014-01-31 4 views
0

, поэтому я пытаюсь создать ситуацию, которая позволяет нам случайным образом тестировать две версии части нашего приложения. Я создал реализацию IHttpHandler (C#, asp.net webforms 4, проект веб-сайта), и когда запрос приходит в наш «магазин», я оцениваю, должны ли они видеть магазин или магазинB.IHttpHandler реализация

Вот реализация обработчика:

public class ShopRequestHandler : IHttpHandler, IReadOnlySessionState 
    { 
     public ShopRequestHandler() { } 

     public void ProcessRequest(HttpContext context) 
     { 
      var originalRequest = context.Request.RawUrl; 
      var process = originalRequest.Contains("shop"); 
      if (process) 
      { 
       if (UsingShopB(context)) 
       { 
        var newRequest = originalRequest.Replace("shop", "shopB"); 
        context.Response.Redirect(newRequest, false); 
       } 
       else 
       { 
        context.Response.Redirect(originalRequest, false); 
       } 
      } 

     } 
     public bool IsReusable 
     { 
      get { return false; } 
     } 

     private bool UsingShopB(HttpContext context) 
     { 
      HttpCookie cookie = context.Request.Cookies["UseShopB"]; 
      if (cookie == null) 
      { 
       var rand = new Random(); 
       var val = rand.Next(1, 10); 
       context.Response.AppendCookie(val%2 == 0 
        ? new HttpCookie("UseShopB", true.ToString()) 
        : new HttpCookie("UseShopB", false.ToString())); 
      } 
      var httpCookie = context.Response.Cookies["UseShopB"]; 
      return httpCookie != null && Boolean.Parse(httpCookie.Value); 
     } 
    } 

Проблема не с перенаправлением в магазин б, который прекрасно работает. Это действительно так, когда мне нужна обычная версия магазина. Я получаю сумасшедший цикл запросов и ошибку, заявляющую, что страница не может быть отображена. Мне кажется, что я не делаю ничего другого, когда магазин запрашивается. Это когда ShopB запрашивается, чтобы изменения произошли. Тупик. Должен ли я использовать RawUrl? Что мне не хватает? Это проблема производства, поэтому любая помощь будет огромной. и просто для повторного итерации, когда случайный выбор - shopB, он отлично работает. гррр.

Я просто хотел добавить, что, когда я изменяю путь, все работает нормально, мне нужна помощь в том, как оставить исходный запрос в одиночку, когда мне не нужно ничего изменять. Помогите!

Спасибо -Sean

+0

Забыл упомянуть, что мы в основном копировали магазин в каталог под названием shopB. У меня есть фильтр, то есть путь в разделе обработчиков правильной конфигурации. Мы хотели бы визуально модифицировать shopB и получать отзывы от наших клиентов. Спасибо. – Sean

ответ

1

Проблема с проверкой вы разместили на интернет-магазин:

процесса вар = originalRequest.Contains ("магазин")

Это будет быть верным как для «Shop», так и «ShopB», поэтому в случае магазина он вернет «ShopB», но в случае ShopB он вернется «ShopBB»

вам нужно более изысканное che ck для этого фильтра. Либо отмените проверку, либо используйте точное совпадение со словом.

+0

Дело в том, что я хочу знать, если это магазин или магазинB, потому что, если в пути содержится какое-либо изменение в магазине слов, я хочу его обработать. Но спасибо. :-) – Sean

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