如何读取aspx页面中的任何字符串。
示例:http://foo.com/bike立场
我想在指定的aspx页面中读取/获取字符串。
预期的页面字符串是自行车架
预期页面是 getstring.aspx
这里我想读取字符串并重定向到指定的页面 注意:我喜欢在ASP.Net(不是MVC)中执行此操作
答案 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).ToArray();
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"/>