我正在尝试检测asp.net页面中的传入URL并在该URL的基础上做出一些决定但我面临的一些问题是我的c#代码检测网址和条件
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
String url = Request.ServerVariables["HTTP_REFERER"];
if (url != "http://172.17.0.221:84/CP.aspx")
{
Response.Redirect("http://a.sml.com.pk");
}
else
{
Response.Redirect("http://172.17.0.221:85/MilkSale.aspx");
}
}
}
</script>
但是当我从http://172.17.0.221:84/CP.aspx调用该页面时,它会出现此错误:
此网页有一个重定向循环。
http://172.17.0.221:85/MilkSale.aspx的网页导致重定向过多。清除此站点的cookie或允许第三方cookie可以解决问题。如果没有,则可能是服务器配置问题,而不是计算机问题。
任何人都可以告诉我这段代码中的错误是什么吗?
答案 0 :(得分:2)
如果您的脚本语句也在MilkSale.aspx页面上,那么每次页面被点击时它都会触发;实际上,它将永远重定向到自己(或者,在这种情况下,直到asp.net检测到它一遍又一遍地请求同一页面)。
首先:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
String url = Request.ServerVariables["HTTP_REFERER"];
if(!String.IsNullOrEmpty(url))
{
if (!url.ToUpper().Contains("CP.ASPX"))
{
Response.Redirect("http://a.sml.com.pk");
}
else if (!url.ToUpper().Contains("MILKSALE.ASPX") && !url.ToUpper().Contains("CP.ASPX"))
{
Response.Redirect("http://172.17.0.221:85/MilkSale.aspx");
}
}
}
}
然后这将解决第一个问题。但是,您必须考虑代码的其他一些问题;
1)非常容易使用;例如,您可以使用String.Compare(url, referrer, StringComparison.InvariantCultureIgnoreCase)
。在我的代码中,我使用了.ToUpper(),但这仍然充满了问题(但是做了一个紧凑的例子)
2)更难;你应该真正取消你的重定向机制与根网址的关联,否则你每次更改网站时都必须更改你的代码。使用属性HttpContext.Current.Request.Url.PathAndQuery
或者最好查看URL rewriting。