【问题标题】:ASP.NET MVC - Routing and ActionFilterAttributeASP.NET MVC - 路由和 ActionFilterAttribute
【发布时间】:2014-03-23 10:19:47
【问题描述】:

我正在使用以下路由来满足我的文化要求:

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 的上述场景。

有可能吗?

非常感谢

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-routing actionfilterattribute


    【解决方案1】:

    如果不需要更改浏览器url,试试看:

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

    如果需要更改浏览器url,需要重定向用户:

    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;
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-09
      • 2016-04-26
      相关资源
      最近更新 更多