使用Asp.net中的路由在URL中添加语言名称

时间:2011-07-21 15:22:30

标签: asp.net url url-routing

我们如何使用路由在URL中添加语言名称?

我的网站成功运行http://localhost:41213/default.aspx网址,但此网站采用多种语言,我的客户希望根据他想要http://localhost:41213/en/default.aspx而不是http://localhost:41213/default.aspx网址的语言运行此网站。

所以我的问题是如何在URL中添加en,es,hi等以及如何阅读? default.aspx页面位于根目录下,它是主页。

2 个答案:

答案 0 :(得分:1)

在global.asax

中使用此代码
public static void RegisterRoutes(System.Web.Routing.RouteCollection routes)
    {
        routes.Add(new System.Web.Routing.Route("{language}/{*page}", new CustomRouteHandler()));
    }
void Application_Start(object sender, EventArgs e)
    {
        RegisterRoutes(System.Web.Routing.RouteTable.Routes);
    }
void Application_BeginRequest(object sender, EventArgs e)
    {
        string URL = HttpContext.Current.Request.Url.PathAndQuery;
        string language = TemplateControlExtension.Language;
        if (URL.ToLower() == "/default.aspx")
        {
            HttpContext.Current.Response.Redirect("/" + language + URL);
        }
    }

制作像这样的路由器处理程序类......

public class CustomRouteHandler : IRouteHandler
{
    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        string language = TemplateControlExtension.GetString(null, requestContext.RouteData.Values["language"]).ToLower();
        string page = TemplateControlExtension.GetString(null, requestContext.RouteData.Values["page"]).ToLower();

        if (string.IsNullOrEmpty(page))
        {
            HttpContext.Current.Response.Redirect("/" + language + "/default.aspx");
        }

        string VirtualPath = "~/" + page;

        if (language != null)
        {
            if (!VIPCultureInfo.CheckExistCulture(language))
            {
                HttpContext.Current.Response.Redirect("/" + SiteSettingManager.DefaultCultureLaunguage + "/default.aspx");
            }
            TemplateControlExtension.Language = language;
        }
        try
        {
            if (VirtualPath.Contains(".ashx"))
            {
                return (IHttpHandler)BuildManager.CreateInstanceFromVirtualPath(VirtualPath, typeof(IHttpHandler));
            }
            return BuildManager.CreateInstanceFromVirtualPath(VirtualPath, typeof(Page)) as IHttpHandler;
        }
        catch
        {
            return null;
        }
    }
}

通过使用这个我希望你的要求已经实现.....

答案 1 :(得分:0)

执行此操作的最佳方法可能是拥有一个初始页面,用户可以选择所需的语言。然后,该网站将一个cookie加载到他的浏览器,表明他的语言偏好。在随后的访问中,您的网站会读取Cookie并自动将其带到他的语言偏好中。