在 IIS 7.5 的 asp.net 中使用 URL 重写规则会导致事件不会在默认页面上触发


一切都

运行良好,直到我添加了一个 url 重写,从页面请求中删除默认值.aspx。一旦我添加了默认页面上的所有回发都会返回到服务器,但不触发正确的事件。

该站点是 .net 2.0(已安装 .net 4.0,但此站点未使用它)IIS 服务器的版本为 7.5

网址重写规则:

<rule name="Default Document URL Rewrite" stopProcessing="true">
    <match url="(.*?)/?Default.aspx$" />
    <action type="Redirect" url="{R:1}" />
</rule>

示例标记代码:

<form id="form1" runat="server">
    <asp:Button runat="server" ID="btnPostBack" Text="Post Back"
        OnClick="btnPostBack_Click" />
    <asp:Label runat="server" ID="lblDone" />
</form>

示例代码隐藏:

protected void btnPostBack_Click(object sender, EventArgs e)
{
    lblDone.Text = "Postback worked!";
}

注意:表单的 action 属性未呈现为空白,因此在page_load中添加一行代码以使用 Request.RawUrl 显式填充它,如此处建议的那样:http://ruslany.net/2008/10/aspnet-postbacks-and-url-rewriting,不起作用。

添加

窗体控件适配器也没有像这里建议的那样:回发不适用于 aspx 页作为默认文档。

提前感谢您的帮助!

编辑:下面的方法似乎适用于其他一些网站上报道的某些人。然而,这对我不起作用。URL 重写规则始终在Page_Load之前启动。:(

您可以通过从表单操作中删除"默认.aspx"来修改其 URL。

此代码片段使用正则表达式忽略大小写:

using System.Text.RegularExpressions;
protected void Page_Load(object sender, EventArgs e)
{
    Form.Action = Regex.Replace(Request.RawUrl.ToString(), "(.*)[dD]efault.aspx(.*)", "", RegexOptions.IgnoreCase);
}

下面的代码片段允许您通过将所有内容设置为小写来忽略大小写。

protected void Page_Load(object sender, EventArgs e)
{
    Form.Action = Request.RawUrl.ToLower().Replace("default.aspx", "");
}

我以沙欣·博伊达斯(Sahin Boydas)对 http://ruslany.net/2008/10/aspnet-postbacks-and-url-rewriting/的评论为基础

对于SEO来说,将所有URL小写或大写是件好事,因为搜索引擎将不同情况下的URL计为单独的URL。这会影响您的网址的排名。但是,最好在站点级别使用 IIS URL 重写之类的内容执行此操作,而不是在页面级别(如上面的 String.Replace 代码段)执行此操作。

相关内容

  • 没有找到相关文章

最新更新