【问题标题】:How to localize urls with routing in ASP.NET WebForms application - not MVC如何在 ASP.NET WebForms 应用程序中使用路由本地化 url - 而不是 MVC
【发布时间】:2012-02-24 18:39:58
【问题描述】:

我有一个网络表单应用程序(VB.net、.NET 4.0),它被翻译成三种语言,我设法本地化了除 URL 之外的所有内容。我的偏好是使用路由,所以我想在这个方向找到一个解决方案(不是 URL 重写或 IIS 重写等)

在许多阅读文章中,我也偶然发现了这篇文章:http://blog.maartenballiauw.be/post/2010/01/26/Translating-routes-%28ASPNET-MVC-and-Webforms%29.aspx,但这个示例是针对 MVC 应用程序的。 (这里的大多数问题也是如此)

非常欢迎任何 cmets 和想法!

【问题讨论】:

  • 为什么要本地化 URL?这是 SEO 的事吗?
  • 是的,搜索引擎优化是主要原因。此外,如果您发送链接(或保存书签),它会直接将您引导至翻译后的内容(无需额外的 url 参数,这使得整个事情更清晰)。
  • 看到这个问题,你就知道整个 URL 重写的疯狂已经过火了。

标签: asp.net localization routing


【解决方案1】:

我可以在 WebForms ASP.NET 应用程序中实现 Maarten 的解决方案,如下所述。

  1. 我下载了他的示例并使用 Visual Studio 打开。如您所见,已翻译路由的基本部分可以在 Routing 文件夹中找到。

  2. 我在我的 Web 应用程序中创建了一个新的类库项目,并复制了这 5 个文件。这个项目错过了一些程序集引用,所以我添加了System.WebSystem.Web.Routing

  3. 在此之后,TranslatedRouteCollectionExtensions 类中只有一个问题。这两种扩展方法使用了MvcRouteHandler。这是唯一依赖于 MVC 的代码。要消除这种依赖关系,请修改两个扩展方法,如下所示:

    public static TranslatedRoute MapTranslatedRoute(
            this RouteCollection routes, 
            string name, 
            string url, 
            object defaults, 
            object routeValueTranslationProviders, 
            IRouteHandler routeHandler, 
            bool setDetectedCulture)
    {
        TranslatedRoute route = new TranslatedRoute(
                                         url,
                                         new RouteValueDictionary(defaults),
                                         new RouteValueDictionary(routeValueTranslationProviders),
                                         setDetectedCulture,
                                         routeHandler);
        routes.Add(name, route);
        return route;
    }
    
  4. 我在我的 Web 应用程序中添加了对这个类库项目的引用。

  5. 有了这个修改,Maarten 的注册翻译路由的例子如下:

    routes.MapTranslatedRoute(
            "TranslatedRoute",
            "{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", id = "" },
            new { controller = translationProvider, action = translationProvider },
            new GeneralRouteHandler(),
            true
        );
    
  6. 实现自定义路由处理程序并不是一个复杂的过程。你可以找到很多关于它的goodarticles

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-10
    • 2016-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    相关资源
    最近更新 更多