自定义IIS重写提供程序重写目标
本文关键字:重写 程序 目标 IIS 自定义 | 更新日期: 2023-09-27 18:03:16
我正在为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仍然不高兴。我怀疑,如果我可以让提供者在用户满足凭据的情况下不执行重写(相当于在标准重写规则上将操作设置为none),那么它应该继续正常加载。然而,我不知道如何做到这一点。
这样做的问题是,提供程序只在初始化时为提供程序设置变量,或者是缓存这些变量。然后将这些值用于多个调用上的多个会话。这对于连接字符串这样的常量是可以的,但对于存储在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];
}
...
这迫使提供者每次都获得新的数据,现在重定向是他们应该去的。
希望对大家有所帮助