【问题标题】:Custom IIS rewrite provider rewrite destination自定义 IIS 重写提供程序重写目标
【发布时间】:2015-09-01 18:06:30
【问题描述】:

我正在为 IIS 编写自定义重写提供程序,以根据是否满足某些条件将用户发送到不同的站点。因此,如果用户符合条件,则 url 不会被重写,用户可以正常进行。如果用户不符合标准,则 url 将被重写以加载不同的站点,同时看起来在同一个 url 上。

如果像这样设置提供程序的重写部分,则 url 不受影响,并且用户按预期发送到站点。

public string Rewrite(string value)
{
    return value;
}

如果将提供程序的重写部分设置为这样,则 URL 被重写,并且用户被发送到备用站点。

public string Rewrite(string value)
{
    return alternateSite;
}

但是,如果我使用以下设置,如果用户不符合他们最终在备用站点中预期的条件。但是,如果它们确实符合条件,它们最终会进入重定向循环。

public string Rewrite(string value)
{
    string newVal = alternateSite;
    if (user != null)
    {
        if (user.status == 1)
        {
            newVal = value;
        }
    }
    return newVal;
}

关于如何防止此循环并正确加载网站的任何想法。

谢谢

EDIT 对此仍然不满意。我怀疑如果用户满足凭据(相当于在标准重写规则上将操作设置为无),我是否可以让提供程序不执行重写,那么它应该继续正常加载。但是我不知道该怎么做。

【问题讨论】:

    标签: c# iis url-rewriting arr


    【解决方案1】:

    问题在于提供程序仅在初始化时设置提供程序的变量,或者它们正在被缓存。这些值随后被用于多个呼叫的多个会话。这对于像连接字符串这样的常量来说很好,但对于像存储在 cookie 中的用户 ID 这样的东西就不行了。相反,我将用户 ID 作为重写本身的一部分发送,并在提供程序逻辑中将其拆分为重写的一部分,如下所示:

    在 IIS 中 {myProvider:{URL}+{HTTP_COOKIE}}

    在提供者中

    public string Rewrite(string value)
    {
        string[] values = value.Split('+');
        string requestUrl = values[0];
        string cookieStr = "";
        if (values.Length > 1)
        {
            cookieStr = values[1];
        }
        ...
    

    这迫使提供者每次都获取新数据,现在重定向按预期进行。

    希望这对某人有用

    【讨论】:

    • 嗨,HowD,感谢您的帖子,请帮我如何解密 Rewrite 方法中的 cookie?我收到“encryptedTicket”参数错误的无效值。我可以在堆栈溢出中创建新帖子吗?
    • 这是我的问题的链接-这是链接-stackoverflow.com/questions/34653227/…
    • 已就您的问题发布了答案。希望对您有所帮助。
    • 好的,我会检查并及时通知您。原始问题在这里,如果可能请看一下 - stackoverflow.com/questions/34506551/…
    猜你喜欢
    • 1970-01-01
    • 2014-07-17
    • 2014-08-18
    • 1970-01-01
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 1970-01-01
    相关资源
    最近更新 更多