1

global.asax単一のルート宛先に対して正常に機能するルーティングを設定しました。home.aspxのように

しかし、私が実際にやろうとしているのは、定義されたルートの後にすべてのページを通常どおりにルーティングすることです

mysite.com/token/home.aspx?demo=yes

Contact?target=mainへのリンクをクリックしてください

mysite.com/token/contact.aspx?target=main

すべてのページで常に{token}を使用したいのですが、Webサイトを通常どおりに動作させたいからです。

現時点では、連絡先などのリンクをクリックするとmysite.com/token/contact.aspx?target=main、URLバーのようにURLが入力されますが、サーバーはリソースが見つからないと言っています。サーバーレベルでは、/ home.aspx / contact.aspx?target=mainへのルーティングを想定しています。

ワイルドカードまたは通常どおり他のページにルーティングする設定はありますか..またはすべてのページを静的ルートではなく実際に要求されたページにルーティングしますが、クエリのパラメーターではなくルート変数としてトークンにアクセスできます?

明確にするために、これはMVCではなく.NET4上のASPWEBFORMSです

4

1 に答える 1

1

ワイルドカードルートを定義し、BuildManagerを使用して正しいファイルを返すことができます。

例:

public class TokenRoute : Route 
{
    class TokenRouteHandler : IRouteHandler
    {
        #region IRouteHandler Members

        public IHttpHandler GetHttpHandler(RequestContext requestContext)
        {
            var path = Convert.ToString(requestContext.RouteData.Values["path"]);
            if (string.IsNullOrEmpty(path))
            {
                path = "Default.aspx";
            }

            var vPath = "~/" + path;

            HttpContext.Current.Items[RoutingUtil.UrlRoutingVirtualPathKey] = vPath;

            return (IHttpHandler)BuildManager.CreateInstanceFromVirtualPath(vPath, typeof(IHttpHandler));
        }

        #endregion
    }

    public TokenRoute(string token) 
           : base(token + "/{*path}", null, new RouteValueDictionary(), new TokenRouteHandler())
    {
        DataTokens = new RouteValueDictionary { { "token", token } };
    }
}

それがお役に立てば幸いです!

于 2013-01-24T21:38:43.900 に答える