gpt4 book ai didi

c# - asp.net 在 url 重写后获取查询字符串值

转载 作者:行者123 更新时间:2023-11-30 23:23:18 24 4
gpt4 key购买 nike

我用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>

重写这个 url :

/pages/details.aspx?id=12

/details/12

因此,在请求新的 url 之后:/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");
}
}

我无法获得任何值(value)

我也试过了:

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");
}
}

但是 TheRealURL 没有任何查询字符串!!调试结果:

{http://localhost:46476/pages/details.aspx}

那么重写 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 页面显示:

详细信息页面

编号: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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com