自定义 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];
}
...
这会强制提供商每次都获取新数据,现在重定向会按预期进行。
希望这对某人有用
正在为 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];
}
...
这会强制提供商每次都获取新数据,现在重定向会按预期进行。
希望这对某人有用