首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IHttpHandler实现

IHttpHandler实现
EN

Stack Overflow用户
提问于 2014-01-31 08:18:20
回答 1查看 224关注 0票数 0

因此,我正在尝试创建一种情况,允许我们随机测试应用程序的一部分的两个版本。我已经创建了一个IHttpHandler的实现(C#,asp.net WebForms4,网站项目),当请求我们的“商店”时,我会评估他们是否应该看到商店或shopB。

下面是处理程序的实现:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

发布于 2014-01-31 14:12:10

问题出在您为Shop设置的检查上:

变量进程=originalRequest.Contains(“商店”)

对于" Shop“和" ShopB”都是如此,因此对于Shop,它将返回"ShopB“,但对于ShopB,它将返回"ShopBB”。

您需要对此筛选器进行更详细的检查。反转检查或使用字数计数的精确匹配。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21470307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档