改变查询字符串参数/值(altering QueryString parameters / valu

2019-10-30 17:00发布

我想更好地了解新的参数设置为URL的问题,并通过检索

var ParaValue = Request.QueryString["parameterName"];

所以,如果我有一个URL:“HTTP://www.myWebsite.aspx用户名=爱丽丝”

我将通过例如检索以上

string uName = Request.QueryString["UserName"].ToString();

但如果我想改变值,例如,使用户名=“拉尔夫”

  • 重新编辑

当按钮被按下时,有一个参数的“状态”,其保持参考至极按钮被按下状态的值是=“无”现在我想将其设置为img_button1。

我不是连送实际工作imgbutton ID

我努力的编码只是为了测试/参考

所以我可以知道我在事件中受Button1的特定事件的procidure reaquested阶段

当事件被triggerd img_button2

然后我想对子级的状态设置为“img_button2”等”

Answer 1:

我做了我的研究之后(我不能标志着这里恳请给我交任何的答案)然后我测试我在遇到两种选择这个堆栈溢出页 :

第一个选项(艾哈迈德Mageed给)我已经测试工作得很好。 和可读性容易理解(因为我仍然记忆犹新到asp.net“招数”)

再其次annakata这是显着改善的方式方法,你实际上并不重定向到实现结果的答案 - 查询字符串修改

玩耍后,我已经desided遵循annakata的做法,并作出这样的使用也与修改查询字符串参数和值的redirerion选择一个辅助方法。

public void QuerStrModify(string CurrQS_ParamName, string NewQs_paramName, string NewPar_Value, bool redirectWithNewQuerySettings = false)
{

    // reflect to readonly property 
    PropertyInfo isReadOnly = typeof(System.Collections.Specialized.NameValueCollection).GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);

    // make collection editable 
    isReadOnly.SetValue(this.Request.QueryString, false, null);

    // remove 
    this.Request.QueryString.Remove(CurrQS_ParamName);

    // modify 
    this.Request.QueryString.Set(NewQs_paramName, NewPar_Value);

    // make collection readonly again 
    isReadOnly.SetValue(this.Request.QueryString, true, null);
    string FullUrl = Request.Url.AbsolutePath;
    if (redirectWithNewQuerySettings)
    {
        Response.Redirect(string.Join("?", FullUrl, this.Request.QueryString));
    }

}

我发现它的人具有与asp.net意识中相当少的经验,所以我张贴作为我的版本正确答案的,因为我看到了很大的帮助。 我希望这会帮助somoeone其他寻求相同的解决方案。

随意进一步完善它,因为我mentiond我不是一个成熟的人才..yet。



Answer 2:

您可以使用HttpModule

public class SimpleRewriter : System.Web.IHttpModule
{

    HttpApplication _application = null;

    public void Init(HttpApplication context)
    {
        context.BeginRequest += new System.EventHandler(context_BeginRequest);
        _application = context;
    }

    public void Dispose()
    {
    }

    private void context_BeginRequest(object sender, System.EventArgs e)
    {
        string requesturl =
            _application.Context.Request.Path.Substring(0,
                _application.Context.Request.Path.LastIndexOf("//")
            );

        string[] parameters = requesturl.Split(new char[] { '/' });

        if (parameters.Length > 1)
        {
            string firstname = parameters[1];
            string lastname = parameters[2];


            //Here you can modify your parameters or your url

            _application.Context.RewritePath("~/unfriendly.aspx?firstname=" +
                firstname + "&lastname=" + lastname);

        }
    }
}

链接: http://msdn.microsoft.com/en-us/library/ms972974.aspx

注册:

<configuration>
  <system.web>
    <httpModules>
      <add name="SimpleRewriter" type="SimpleRewriter"/>
     </httpModules>
  </system.web>
</configuration>

链接: http://msdn.microsoft.com/en-us/library/ms227673%28v=vs.100%29.aspx



Answer 3:

这里的问题是一个问题,“真理之源”。 该NameValueCollection中被暴露HttpRequest.QueryString公开查询字符串,不应该被修改,因为查询字符串被调用者提供。 如果应用程序具有用户名查询字符串参数,但它可能需要改变,例如用于测试,在可以得到,如果需要它形成交替源的方法包裹。 例如:

// A very simple container
public static class SystemInfo
{
    // This would be an instance of QueryStringUserInfo
    // by default but could be changed for testing.
    public IUserInfo UserInfo
    {
        get;
        private set;
    }
}

// An interface that contains the user operations 
public interface IUserInfo
{
    string UserName { get; }
}

// Get the user name from the query string. This would
// be the default.
public class QueryStringUserInfo: IUserInfo
{
    public string UserName
    {
        get
        {
            return Request.QueryString["UserName"].ToString();
        }
    }
}

// Get the user name from the query string. This would
// be the default.
public class TestUserInfo: IUserInfo
{
    public string UserName
    {
        get
        {
            return "Foo";
        }
    }
}

因此,而不是直接调用查询字符串为用户名(或任何资料片),呼吁系统的系统信息的属性(可怕的名字,但你明白了吧)。 它允许的设置的源将被改变,例如,如果代码使用网页以外或用于测试。



文章来源: altering QueryString parameters / values