Update HttpContext.Current.Request.QueryString

本文关键字:QueryString Request Current HttpContext Update | 更新日期: 2023-09-27 18:23:56

我有一个函数,它试图根据HttpContext.Current.Request.QueryString中的内容筛选数据。最近的一项"改进"改变了我过滤所显示内容的方式。现在,我需要在运行过滤函数之前更新QueryString。基于其他一些StackOverflow问题,我尝试了几种不同的方法,但都不起作用。

    var queryString = HttpContext.Current.Request.QueryString;
    var nameValues = HttpUtility.ParseQueryString( queryString.ToString() );
    nameValues.Add( "IsDeleted", "False" );
    string url = HttpContext.Current.Request.Url.AbsolutePath;
    string updatedQuerySring = "?" + nameValues.ToString();
    HttpContext.Current.Response.Redirect( url + updatedQuerySring );

上面抛出了一个系统。Web.HttpException错误"发送HTTP标头后,服务器无法设置状态。"

HttpContext.Current.Request.QueryString.Add( "IsDeleted", "False" );

    NameValueCollection newQuery = new NameValueCollection();
    foreach( var key in queryString.Keys ){
        var value = queryString[ key.ToString()];
        newQuery.Add( key.ToString(), value );
    }
    newQuery.Add( "IsDeleted", "False" );
    HttpContext.Current.Request.QueryString = newQuery;

两者都会出现"错误20不能将属性或索引器System.Web.HttpRequest.QueryString分配给它--它是只读的"。你如何更新QueryString,以便我可以添加IsDeleted过滤器?

EDIT有人建议将其保存在会话或tempdata变量中,但这不起作用,因为在多个重定向中都需要它。

Update HttpContext.Current.Request.QueryString

您需要将httpcontenxt.current属性设为false的只读属性,然后立即分配参数。

PropertyInfo isreadonly = typeof(System.Collections.Specialized.NameValueCollection).GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
isreadonly.SetValue(HttpContext.Current.Request.QueryString, false, null);                
HttpContext.Current.Request.QueryString.Set(key, value);                
isreadonly.SetValue(HttpContext.Current.Request.QueryString, true, null);