我想从所有重定向请求中删除查询参数“mobile”。Redirect.aspx 页面将访问者重定向到 Default.aspx?mobile=1。而当访问者浏览到 Redirect,aspx 时,最终他应该被引导到地址栏中没有参数的 Default.aspx。我采取的步骤:因此,如果当前请求是重定向,我必须从查询字符串中删除查询参数“mobile”。这就是问题所在:我正在检查状态代码是否为 3xx 并且查询是否具有“移动”参数,但此条件永远不会等于真。
重定向.aspx:
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
Context.Response.Redirect("Default.aspx?mobile=1");
}
移除参数模块:
public class RemoveParamModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.EndRequest += RewriteHandler;
}
private void RewriteHandler(object sender, EventArgs eventArgs)
{
var context = (HttpApplication)sender;
var statusCode = context.Response.StatusCode;
if (statusCode.IsInRange(300, 399) && context.Request.QueryString["mobile"] != null)
{
DeleteMobileParameter(context.Request.QueryString);
context.Response.Redirect(context.Request.Path, true);
}
}
private static void DeleteMobileParameter(NameValueCollection collection)
{
var readOnlyProperty = collection.GetType().GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
readOnlyProperty.SetValue(collection, false, null);
collection.Remove("mobile");
readOnlyProperty.SetValue(collection, true, null);
}
public void Dispose()
{
}
}
为什么模块中的请求要么具有 statusCode=302 要么具有参数“mobile”,但从不同时具有两者?以及如何删除重定向的参数“mobile”?