转换网址时路由停止工作

时间:2019-04-23 08:15:39

标签: c# asp.net-mvc routing localization controlleractioninvoker

我创建了一个简单的MVC项目来测试URL的翻译。我正在使用nuget软件包RouteLocalization.MVC进行翻译。添加此程序包并对其进行配置后,路由会停止工作,即使URL与路由匹配,也会始终出现404 http错误。

在这里,一步一步地完成我的工作:

  1. 我创建了一个MVC项目,一个简单的控制器和一个简单的操作返回了一个视图。
  2. 我配置了在URL中使用语言的路由。这是我的RouteConfig.cs中的代码:

    routes.MapRoute(
        name: "Default",
        url: "{lang}/{controller}/{action}/{id}",
        constraints: new { lang = @"(\w{2})|(\w{2}-\w{2})" },
        defaults: new { lang = "it", controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
    
    routes.MapRoute(
        name: "Default2",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
    
  3. 我创建了一个自定义IControllerActivator来更改语言,并在Global.asax中注册了该语言:

    public class LocalizedControllerActivator : IControllerActivator
    {
        private string _DefaultLanguage = "it";
    
        public IController Create(RequestContext requestContext, Type controllerType)
        {
            //Get the {language} parameter in the RouteData
            string lang = _DefaultLanguage;
            if (requestContext.RouteData.Values["lang"] != null)
                 lang = requestContext.RouteData.Values["lang"].ToString();
    
            if (lang != _DefaultLanguage)
            {
                try
                {
                    Thread.CurrentThread.CurrentCulture =
                    Thread.CurrentThread.CurrentUICulture = new CultureInfo(lang);
                }
                catch (Exception e)
                {
                    throw new NotSupportedException(String.Format("ERROR: Invalid language code '{0}'.", lang));
                }
            }
    
            return DependencyResolver.Current.GetService(controllerType) as IController;
        }
    }
    
  4. 此时,一切正常。而且,如果我在iten之间切换,我会发现我的看法有所不同。

  5. 我添加了RouteLocalization.MVC NuGet软件包。我用翻译后的网址修饰了控制器/操作。

    [RoutePrefix("HomeITA")]
    public class HomeController : Controller
    {
        [Route("IndexITA", Name = "IndexRouteName")]
        public ActionResult Index()
        {
            return View();
        }
    }
    
  6. 在路由配置之前的RouteConfig.cs中,添加以下行:

    routes.MapMvcAttributeRoutes(Localization.LocalizationDirectRouteProvider);
    

一切都停止了。我正在使用路由调试器来了解哪个是我的错误,但我不明白。结果如下:

  1. 测试是否使用控制器/动作的名称。自定义IControllerActivator在这里运行:

enter image description here

  1. 测试是否使用翻译后的网址。自定义IControllerActivator在这里不会运行:

enter image description here

怎么了? 想念你

0 个答案:

没有答案