簡體   English   中英

ASP.NET MVC-路由和ActionFilterAttribute

[英]ASP.NET MVC - Routing and ActionFilterAttribute

我將以下路線用於我的文化要求:

routes.MapRoute(
                name: "SpecificCulture",
                url: "{culture}/{controller}/{action}/{id}",
                defaults: new
                {
                    controller = "Home",
                    action = "Index",
                    id = UrlParameter.Optional,
                    culture = ""
                }
            );  

我也有下面的過濾器:

public class CultureFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        base.OnActionExecuting(filterContext);

        var cultureName = (filterContext.RouteData.Values["culture"] as string) ?? string.Empty;

        if (!string.IsNullOrWhiteSpace(cultureName) && CultureHelper.IsValidCulture(cultureName))
        {
            // e.g if requested cultureName is EN-ZZ the below method will get EN-US
            cultureName = CultureHelper.GetImplementedCulture(cultureName);
            filterContext.RouteData.Values["culture"] = cultureName;
            Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(cultureName);
            Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
        }
    }
}

因此,正如您在ActionFilterAttribute上看到的那樣,我正在根據請求的URL來獲取近似區域性。

一切工作正常,但我想在上述情況下也更改URL,在這種情況下,用戶要求輸入EN-ZZ,而我得到EN-US。

可能嗎 ?

非常感謝

如果您不需要更改瀏覽器網址,請嘗試:

var cultureName = (filterContext.RouteData.Values["culture"] as string) ?? string.Empty;
if (string.Compare(cultureName,"EN-ZZ",true) == 0)
{
    cultureName  = "EN-US";
}

如果您需要更改瀏覽器網址,則需要重定向用戶:

var cultureName = (filterContext.RouteData.Values["culture"] as string) ?? string.Empty;
if (string.Compare(cultureName, "EN-ZZ", true) == 0)
{
     filterContext.RouteData.Values["culture"] = "EN-US"; //Replace with another culture
     filterContext.Result = new RedirectToRouteResult(filterContext.RouteData.Values);
}
else if (!string.IsNullOrWhiteSpace(cultureName) && CultureHelper.IsValidCulture(cultureName))
{
        // e.g if requested cultureName is EN-ZZ the below method will get EN-US
        cultureName = CultureHelper.GetImplementedCulture(cultureName);
        filterContext.RouteData.Values["culture"] = cultureName;
        Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(cultureName);
        Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM