因此,我正在尝试创建一种情况,允许我们随机测试应用程序的一部分的两个版本。我已经创建了一个IHttpHandler的实现(C#,asp.net WebForms4,网站项目),当请求我们的“商店”时,我会评估他们是否应该看到商店或shopB。
下面是处理程序的实现:
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);
}
}问题不在于重定向到商店b,这很有效。这真的就是我想要的普通版本的商店。我得到了一个疯狂的请求循环和一个错误,告诉我页面无法显示。在我看来,当请求购物时,我并没有真正做任何不同的事情。当shopB被请求时,修改就会发生。被难住了。我不应该使用RawUrl吗?我遗漏了什么?这是一个生产问题,所以任何帮助都是巨大的。再重复一遍,当随机选择为shopB时,它可以完美地工作。grrr。
我只想补充说,当我修改路径时,一切都很好,我需要的帮助是,当我不需要修改任何东西时,如何让原始请求保持原样。帮助!
谢谢你,-Sean
发布于 2014-01-31 14:12:10
问题出在您为Shop设置的检查上:
变量进程=originalRequest.Contains(“商店”)
对于" Shop“和" ShopB”都是如此,因此对于Shop,它将返回"ShopB“,但对于ShopB,它将返回"ShopBB”。
您需要对此筛选器进行更详细的检查。反转检查或使用字数计数的精确匹配。
https://stackoverflow.com/questions/21470307
复制相似问题