4

私たちのサイトには、ユーザーがサインアップして、 ~/ pageSlugでホストしたいサイトに自分のページを与えることができるエリアがあります。Global.asax のルールを使用して実行しようとしましたが、~/ Controllerを Index アクションに直接マップできるようにする基本的なデフォルト ルートが壊れてしまいました。userSlug の前に任意の種類のセパレーターを配置することは許可されていないため、~/p/ pageSlugは実際にはここではオプションではありません。

ユーザー ページをルートに追加するという点では、App_Start でページを循環し、それらを RoutesTable に明示的に追加しています。これは正常に機能しており、これを 1 日 1 回のタスクにするのに十分な長さの AppPool 更新が設定されています。ただし、これにより、ユーザーのために「ページをライブにする」ために24時間のターンアラウンドが残りますが、これを解決しようとしています.

理想的には、ユーザーがサインアップしたら、関連するルートを RouteTable に動的に追加することです。私はそれをやってみました:

RouteTable.Routes.Add(
    RouteTable.Routes.MapRoute(
        toAdd.UrlSlug + "Homepage", 
        toAdd.UrlSlug, 
        new { controller = "Controller", View = "View", urlSlug = toAdd.UrlSlug }
    )
);

しかし、それはうまくいかないようでした。私はどこにも解決策を見つけることができません.私のコードは恐ろしく素朴であり、ルーティングの理解の欠如を裏切っていると確信しています-助けてください!

4

3 に答える 3

4

ルート制約を使用して、これを試してみるとどうでしょうか。すべてのユーザーのリストを取得し、そのリストのエントリに一致するように選択したルートを制限します

public class UserPageConstraint : IRouteConstraint
{
    public static IList<string> UserPageNames = (Container.ResolveShared<IUserService>()).GetUserPageNames();

    bool _IsUserPage;
    public UserPageConstraint(bool IsUserPage)
    {
        _IsUserPage = IsUserPage;            
    }

    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
    {
        if (_IsUserPage)
            return UserPageNames.Contains(values[parameterName].ToString().ToLower());
        else
            return !UserPageNames.Contains(values[parameterName].ToString().ToLower());
    }
}

次に、Global.asax.cs で、次のようにユーザーのルートを設定します。

routes.MapRoute("UserHome", "{userPage}", new { controller = "UserPageController", action = "Index" }, new { userPage = new UserPageConstraint(true) });

上記のルートでは、UserPageController のアクション 'index' で、パラメーターとして userPage を取得します。

userPage ホームに関連する他のルートについては、それに応じてルートを追加できます。たとえば、userdetails ページ ルートは次のように追加できます。

routes.MapRoute("UserHome", "{userPage}/mydetails", new { controller = "UserPageController", action = "Details" }, new { userPage = new UserPageConstraint(true) });

これを試してみてください。

于 2011-02-01T08:02:00.480 に答える
0

ルートを動的に追加できるとは思いません。

この質問を見てください。多分それはあなたを助けるでしょう: 検索のためのASP.NET MVCカスタムルーティング

于 2011-01-31T09:22:19.367 に答える