我使用iis url重写, 我添加了这条规则
<rule name="rewrite to details pages" stopProcessing="true">
<match url="^details/([0-9]+)" />
<action type="Rewrite" url="pages/details.aspx?id={R:1}" />
</rule>
重写此网址:
/pages/details.aspx?id=12
到
/details/12
因此,在请求新网址:/details/12后,尝试使用以下代码获取查询字符串:
protected void Page_Load(object sender, EventArgs e)
{
try
{
long itemid;
if (long.TryParse(Request.QueryString["id"], out itemid))
{
// value is null
}
else
{
Response.Redirect("default.aspx");
}
}
catch
{
Response.Redirect("default.aspx");
}
}
我无法获得任何值
我也尝试过:
protected void Page_Load(object sender, EventArgs e)
{
try
{
//var rawURl = Request.RawUrl;
//Uri currentUrl = new Uri(Request.Url.GetLeftPart(UriPartial.Authority) + Request.ServerVariables["SCRIPT_NAME"] + "?" + Request.ServerVariables["QUERY_STRING"]);
Uri theRealURL = new Uri(HttpContext.Current.Request.Url.Scheme + "://" + HttpContext.Current.Request.Url.Authority + HttpContext.Current.Request.RawUrl);
string yourValue = HttpUtility.ParseQueryString(theRealURL.Query).Get("id");
long itemid;
if (yourValue , out itemid))
{
// no query strings
}
else
{
Response.Redirect("default.aspx");
}
}
catch
{
Response.Redirect("default.aspx");
}
}
但是 RealURL 没有任何查询字符串! 调试结果:
那么重写 url 后如何获取查询字符串?
最佳答案
如果您访问/details/12,您应该能够在details.aspx 页面上使用Request.QueryString["id"] 并检索值“12”。我在本地测试过,它对我有用。您还有其他可能会产生干扰的规则吗?
还要确保您已安装最新的 IIS 重写:http://www.iis.net/downloads/microsoft/url-rewrite .
我使用以下代码在本地运行它:
web.config:
...
<system.webServer>
<rewrite>
<rules>
<rule name="rewrite to details pages" stopProcessing="true">
<match url="^details/([0-9]+)" />
<action type="Rewrite" url="details.aspx?id={R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
...
详细信息.aspx:
<h1>Details Page</h1>
<strong>ID:</strong> <asp:Literal ID="litId" runat="server" />
details.aspx.cs
public partial class details : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e) {
try {
long itemid = -1;
string req = Request.QueryString["id"];
if (long.TryParse(req, out itemid)) {
litId.Text = itemid.ToString();
}
else {
litId.Text = "Couldn't parse!";
}
}
catch (Exception ex){
litId.Text = "An error occured:" + ex.Message;
}
}
}
现在,如果我访问/details/12345,页面将显示:
详细信息页面
ID:12345
如果这对您不起作用,则可能是其他原因干扰了您的重写,或者您的 IIS 设置与我的不同。
我不需要在我的开发服务器上执行此操作,但您可以尝试将 appendQueryString="true" 附加到您的 web.config 规则中。例如
<action type="Rewrite" url="details.aspx?id={R:1}" appendQueryString="true" />
关于c# - asp.net在url重写后获取查询字符串值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38420435/