4

URL のページ名とクエリ文字列を非表示にするために、asp.net で URL マスキングを設定したいと考えています。

現在、グローバル アプリケーション ファイルで URL 書き換えを実行するために、以下のコードを設定しています。

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

しかし、エンドユーザーにドメイン名のみが表示されるように URL を書き換えたいと考えています。 http://www.domainname.com - このように

設定するのを手伝ってください。

前もって感謝します、

4

6 に答える 6

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

ドメイン マスキングを使用する場合、コードの変更はなく、同じ結果が得られます。

于 2013-11-01T08:04:05.503 に答える
1

Cookie とユーザー コントロールを使用して asp.net ルーティングをシミュレートする必要があります。そのため、default.aspx という名前の aspx ファイルが 1 つだけあり、他のページはユーザー コントロールに配置する必要があります。このスクリプトを 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

たとえば、default.aspx 書き込みイベントに asp.net ボタンがある場合は、次のように Server.Transfer メソッドを使用する必要があります。

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

このメソッドを使用すると、URL は変更されず、login.aspx でクエリ文字列を取得できます

于 2016-01-17T06:32:37.503 に答える