2

私の cms (myprettycms.codeplex.com) 用のカスタム FriendlyURL アナライザーに取り組んでいます。システムは多言語です:

ファイルを見ると:

https://myprettycms.codeplex.com/SourceControl/changeset/view/19148#457568

これは、2 つのコントローラーの基本クラスです。1 つはパブリックで、もう 1 つはプライベートです。2 つのコードの違いは、非公開のオーソライズ装飾です。

ログイン URL は、アクセスしようとしているページの言語によって異なります。

次のような英語のページにいる場合:

http://www.mydomain.com/en-us/products/priduct_list.htm

このページが非公開 (コントローラーが に設定されているDynaContentPrivateController) で、認証されていない場合、システムは要求を でLoginURL定義されたにリダイレクトしweb.configます。

このとき、「~/logon」に設定されています。

" " のようなものがあれば~/{0}/logon、コードの一部をオーバーライドして、探していたページ{0}の言語に置き換えることができます。

私たちを手伝ってくれますか ?

4

1 に答える 1

2

私は解決策を見つけました...

私は web.config 設定を保持しました:

<authentication mode="Forms">
  <forms loginUrl="~/LogOn" timeout="2880" />
</authentication>

コードプレックスの Web.Config

RouteConfig.cs 内

routes.MapRoute(
    name: "LogOn",
    url: "LogOn/{action}",
    defaults: new { controller = "LogOn", action = "SelectLanguage" }
);

そして言語では、RouteConfig.cs のルート ループ

foreach (var l in Languages)
{
    ...
    routes.MapRoute(
    name: "LogOn" + l.Name.ToUpper(),
    url: l.Description + "/logon/{action}",
    defaults: new { controller = "LogOn", action = "Index", language = l.Description }
    );
    ...
}

コードプレックスの routeconfig.cs

コントローラーベースに

public string URLReferLanguage
{
    get
    {
        string toReturn = ConfigurationManager.AppSettings["DefaultLanguage"];
        string language = string.Empty;
        string[] tLanguages = ConfigurationManager.AppSettings["Languages"].Split(',');
        string urlReferrer = HttpContext.Request.UrlReferrer.AbsolutePath;
        if (urlReferrer != null)
        {
            if (urlReferrer.Length > 5)
            {
                language = urlReferrer.Substring(1, 5).ToLower();
                if (tLanguages.Contains(language))
                {
                    toReturn = language;
                }
            }
        }
        return toReturn;
    }
}

コードプレックスの _Controller_Base

セキュリティ層のログオン コントローラで

public ActionResult SelectLanguage()
{
    return Redirect(string.Format("/{0}{1}", base.URLReferLanguage, Request.Url.PathAndQuery));
}

/// <summary>
/// URL: /en-us/LogOn
/// </summary>
/// <returns></returns>
public ActionResult Index()
{
    string eMethod = eMethodBase + ".Index[GET]";
    using (DataRepositories _dataContext = new DataRepositories())
    {
        base.InitView(
            Resources.View_LogOn_PageTitle,
            string.Empty,
            specificCssCollection,
            specificJSCollection,
            dynamicJSCollection,
            specificJqueryJSCollection,
            jsVariables,
            externalCSS,
            Meta,
            _dataContext,
            false,
            base.RequestLanguage,
            false
        );
    }
    string returnUrl = Request.QueryString["ReturnUrl"];
    if (!string.IsNullOrEmpty(returnUrl))
    {
        ContentData.ReturnUrl = returnUrl;
    }
    return View(ContentData);
}

codeplex の LogOn コントローラー

そのため、ユーザーが標準の役割とメンバーシップ (私のプロバイダーは標準のものを継承) によって LoginForm にリダイレクトされると、コントローラーは UrlRefer を分析し、アドレス指定してリダイレクトする言語を追加します。

于 2013-02-24T22:34:39.303 に答える