在asp.net中读取查询字符串而不指定任何页面名称

时间:2017-01-24 07:35:30

标签: asp.net query-string

如何读取aspx页面中的任何字符串。

示例:http://foo.com/bike立场

我想在指定的aspx页面中读取/获取字符串。 预期的页面字符串是自行车架
预期页面是 getstring.aspx

这里我想读取字符串并重定向到指定的页面 注意:我喜欢在ASP.Net(不是MVC)中执行此操作

3 个答案:

答案 0 :(得分:4)

您可以使用Route解决此问题。我做了一个简单的演示,你可以在几分钟内试用。在Global.asax.cs文件中,添加以下方法:

void RegisterRoutes(RouteCollection routes)
{
    routes.MapPageRoute("Products",
        "Products/{product}", "~/getstring.aspx",
        false,
        new RouteValueDictionary { { "product", "NoneSelected" } }
    );
}

在同一个文件中,在现有的void Application_Start(object sender, EventArgs e)方法中,添加RegisterRoutes(RouteTable.Routes);

void Application_Start(object sender, EventArgs e)
{
    RegisterRoutes(RouteTable.Routes);
}

有了这个,你已经配置了Route,它将接受这样的请求:

http://foo.com/Products/bike%20stand

并将其映射到getstring.aspx。请注意,我有url编码url中的空格。

getstring.aspx中,您可以像这样访问值(“自行车站”):

protected void Page_Load(object sender, EventArgs e)
{
    string routeValue = "";
    if (RouteData.Values.ContainsKey("product"))
        routeValue = RouteData.Values["product"].ToString();

    //routeValue now contains "bike stand"

    SelectedProduct.Text = routeValue;
}

我已在此示例中的应用程序文件夹下的“Products”路径中设置了Route。我不建议您直接在应用程序文件夹下设置路径,如问题所示。如果你绝对想要:

可以这样做
void RegisterRoutes(RouteCollection routes)
{
    routes.MapPageRoute("Products",
        "{product}", "~/getstring.aspx",
        false,
        new RouteValueDictionary { { "product", "NoneSelected" } }
    );
}

答案 1 :(得分:3)

这可能不是满足您需求的最佳方式,但如果您想从URL获取字符串部分,则可以使用URI段。

HttpContext.Current.Request.Url.Segments.Select(x=>x.TrimEnd‌​('/')).Skip(2).ToArr‌​ay();

OR

new Uri("http://www.someurl.com/foo/xyz/index.htm#extra_text").Segments

结果:[ "/", "foo/", "xyz/", "index.html" ]

阅读完字符串后,你可以做任何你想做的事情,比如重定向等等。

答案 2 :(得分:2)

您可以使用IIS URL Rewrite Module。安装后,您可以在Web.Config System.Webserver节点中创建一个重写URL的规则,以便可以在后面的代码中处理字符串作为QueryString。

<rewrite>
  <rules>
    <rule name="getString" stopProcessing="true">
      <match url="^([a-z0-9- /]+)$" ignoreCase="true"/>
      <action type="Rewrite" url="getstring.aspx?string={R:1}"/>
    </rule>      
  </rules>
</rewrite>

然后您可以使用以下方法获取字符串值:

string getString = Request.QueryString["string"];

但是,如果除了getstring.aspx之外还有其他页面需要访问,那么他将会产生一个问题,因为现在每个请求都被发送到getstring.aspx。也许最好使用前缀,以便您可以将请求URL标识为具有字符串的URL。

http://foo.com/getstring/bike stand

<match url="^getstring/([a-z0-9- /]+)$" ignoreCase="true"/>