自定义 IIS 重写提供程序重写目标

Custom IIS rewrite provider rewrite destination

正在为 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;
}

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

谢谢

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

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

在 IIS 中 {我的提供者:{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];
    }
    ...

这会强制提供商每次都获取新数据,现在重定向会按预期进行。

希望这对某人有用