【问题标题】:How to retrieve parameters from Route to Filter?如何从路由检索参数到过滤器?
【发布时间】:2020-02-26 19:48:23
【问题描述】:

我创建了一个过滤器,允许我根据 URL 中参数 lang 的值选择特定视图。如果 lang=fr,view_fr.cshtml 将被调用。

public class LocalizedViewAttribute : ActionFilterAttribute
{
    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        string defaultLang = "en";

        var routeData = filterContext.RouteData.Values;

        string lang = (string)routeData["lang"];
        if (!String.IsNullOrEmpty(lang))
        {
            defaultLang = lang;
        }

        var viewResult = filterContext.Result as ViewResultBase;
        if (viewResult != null)
        {
            if (string.IsNullOrWhiteSpace(viewResult.ViewName))
            {
                viewResult.ViewName = filterContext.RouteData.GetRequiredString("action");
            }

            var v = ViewEngines.Engines.FindView(
                filterContext.Controller.ControllerContext,
                viewResult.ViewName + "_" + defaultLang, null
                );
            if (v.View != null)
                viewResult.ViewName += "_" + defaultLang;
        }

        base.OnResultExecuting(filterContext);
    }
}

以及本地化的路线

 routes.MapRoute(
       name: "Localization",
       url: "{lang}/{controller}/{action}/{id}", // URL with parameters
       new { lang = "", controller = "Static", action = "Index" } // Parameter defaults
 );

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

但参数“lang”始终为空。我究竟做错了什么 ? 谢谢。

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-mvc-4 localization


    【解决方案1】:

    您的本地化路由没有定义可选的id 参数,因此只有当所有四个路由参数都出现在 URL 中时它才会匹配。因此,您只使用了没有lang 参数的默认路由。

    【讨论】:

      猜你喜欢
      • 2014-01-14
      • 1970-01-01
      • 2017-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-22
      • 2015-04-05
      • 1970-01-01
      相关资源
      最近更新 更多