4

我想在 asp.net 中设置 URL Masking 以隐藏 URL 中的页面名称和查询字符串。

目前我正在设置下面的代码以在全局应用程序文件中执行 url 重写。

routeCollection.MapPageRoute("Login", "Login", "~/frmLogin.aspx");

但我想以一种只向最终用户显示域名的方式重写 URL。 http://www.domainname.com - 像这样

请帮我设置它。

提前致谢,

4

6 回答 6

4

您可以将 frmLogin.aspx 页面设置为 Web 服务器中的默认页面。

如果您使用的是 IIS 7,步骤如下:

 1.Select your website
 2. In description click on default document
 3. Add your page (frmLogin.aspx) in and set its priority.
于 2016-01-19T09:20:58.663 回答
2

我们在我们的应用程序中使用以下方法在域上简单地显示标志页。它也可以针对其他页面进行修改。

在 Global.asax 中:

routeCollection.MapPageRoute("SIGNIN", String.Empty, "~/signin.aspx");
于 2013-12-02T12:24:14.593 回答
1

If you use domain masking then there are no code changes and you achieve the same result.

于 2013-11-01T08:04:05.503 回答
1

我为实验目的尝试了以下方法。所以我不知道它在回发的复杂页面上会如何表现。

当您请求 www.domainname.com 时,实际请求将转到 www.domainname.com /default.aspx 或您设置的任何其他默认页面。在默认页面加载中,第一件事是检查任何名为“pagetoview”的会话,如果已设置,则 server.transfer 到该页面,否则服务器默认页面。

现在假设用户从页面转到 form.aspx'。form.aspx 加载方法应检查 pagetoview 会话变量是否与当前页面名称相同,然后取消设置并继续,否则将 pagetoview 变量设置为当前页面名称并重定向到域。

那里会检查默认页面并会发生 server.transfer。希望您对这种奇怪的方法有所了解。

于 2013-11-01T08:13:32.493 回答
1

您应该使用 cookie 和用户控件模拟 asp.net 路由。所以我们只有一个名为 default.aspx 的 aspx 文件,其他页面应放入用户控件中。将此脚本放在 default.aspx 的末尾:

<script src="https://code.jquery.com/jquery-2.2.0.min.js" type="text/javascript"></script>
<script>
    $(document).ready(function () {
        $("a").click(function (e) {
            e.preventDefault();
            var attrHref = $(this).attr("href");
            $.getJSON("/service.asmx/SetRouteCookie", { href: attrHref }, function (e) {
                window.location.reload();
            });
        });
    });
</script>

此脚本禁用所有链接行为,然后我们手动处理点击事件。在单击事件中,我们通过 ajax 调用 Web 服务方法。该服务设置了一个特定的 cookie 来保存当前页面:

[WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json, XmlSerializeString = false, UseHttpGet = true)]
    public void SetRouteCookie()
    {
        if (HttpContext.Current.Request.QueryString["href"] != null)
        {
            string href = HttpContext.Current.Request.QueryString["href"];
            HttpCookie c = new HttpCookie("CurrentRoute", href);
            c.Expires = DateTime.Now.AddHours(1);
            HttpContext.Current.Response.Cookies.Add(c);

            HttpContext.Current.Response.ContentType = "application/json";
            HttpContext.Current.Response.Write("{\"status\":\"ok\"}");

        }
    }

创建 cookie 并成功回调后,我们通过 javascript 重新加载页面。在默认的 Page_Load 事件中,我们加载适当的用户控件:

protected void Page_Load(object sender, EventArgs e)
    {
        #region process route

        if (HttpContext.Current.Request.Cookies["CurrentRoute"] != null)
        {
            var route = HttpContext.Current.Request.Cookies["CurrentRoute"].Value.ToString();
            string pageName = GetPageName(route);
            Placeholder1.Controls.Add(LoadControl("/ctrls/" + pageName + ".ascx"));
        }
        else
        {
            Placeholder1.Controls.Add(LoadControl("/ctrls/default.ascx"));
        }

        #endregion

    }

    public string GetPageName(string href)
    {
        int index = href.IndexOf("&");
        if (index == -1)
            return href.Trim('/');
        else
        {
            return href.Substring(0, index).Trim('/');
        }
    }

我在 git 上创建了示例代码: HideRoute

于 2016-01-16T16:09:56.897 回答
1

您应该使用 Server.Transfer 方法,例如您在 default.aspx 写入事件中有 asp.net 按钮,如下所示:

 Server.Transfer("/login.aspx?q1=testQuery");

使用这种方法,您的 url 不会更改,并且在 login.aspx 中您可以获取查询字符串

于 2016-01-17T06:32:37.503 回答