Asp.net mvc Net MVC:如何向所有url添加国家代码 我有两个要求

Asp.net mvc Net MVC:如何向所有url添加国家代码 我有两个要求,asp.net-mvc,asp.net-mvc-routing,url-rewrite-module,Asp.net Mvc,Asp.net Mvc Routing,Url Rewrite Module,第一个是:我的要求是添加国家代码的所有网址。在我的url看起来像 www.mysite.net/catalog.aspx www.mysite.net/product.aspx www.mysite.net/cart.aspx 但现在我必须在globalplace中编写一些代码,只需读取cookie值,就可以在所有url中注入2个字符的国家代码。所以我的新url看起来像 www.mysite.net/uk/catalog.aspx www.mysite.net/uk/product.aspx w

第一个是:我的要求是添加国家代码的所有网址。在我的url看起来像

www.mysite.net/catalog.aspx

www.mysite.net/product.aspx

www.mysite.net/cart.aspx

但现在我必须在globalplace中编写一些代码,只需读取cookie值,就可以在所有url中注入2个字符的国家代码。所以我的新url看起来像

www.mysite.net/uk/catalog.aspx

www.mysite.net/uk/product.aspx

www.mysite.net/uk/cart.aspx

所以,告诉我需要在网站的全局区域中添加什么代码,在url中插入国家代码

第二个是:当国家代码将被注入到浏览器地址栏的url中,那么我所有页面中的所有链接都应该具有相同的国家代码

如果可能的话,用代码示例和提示来讨论这个问题。一个人告诉我下载并安装IIS URL重写模块,但我不知道IIS URL重写模块如何从国家cookie中读取国家代码。我想我需要为此添加一些代码

我可以通过asp.NETMVC中的url路由来解决这个问题。正在寻求帮助


谢谢,这样我就完成了工作。所以我想和大家分享一下,这可能会帮助别人

我的应用程序\u BeginRequest看起来像 CookieSettings课程 例程配置看起来像 主控制器索引操作看起来像
这个问题结束了。

这样我就完成了工作。所以我想和大家分享一下,这可能会帮助别人

我的应用程序\u BeginRequest看起来像 CookieSettings课程 例程配置看起来像 主控制器索引操作看起来像
此问题已结束。

如果URL中包含区域性,则不需要cookie。您没有将区域性注入URL,用户通过URL请求区域性。请参阅:。我的网站有许多国旗。因此,当用户单击任何国家的国旗时,我们会在用户pc中删除带有国家代码的cookie,并显示基于国家代码的本地化数据,但当用户第一次来时,则不存在cookie,默认国家变为GB。但这并不意味着您需要cookie。如果您需要本地化的信息已经在URL中,那么您不需要它(也不应该使用它)。本地化是内容,而不是个性化。您应该将每个区域性放在URL中,以便搜索引擎可以用本地语言对其进行索引,而不是将其隐藏在搜索引擎永远不会提供的cookie后面。我的网站是基于cookie的。基本上,我有一个用webform开发的父网站,现在我必须用mvc开发另一个小网站,它将在我的主网站下运行,并从我的主网站读取cookie。如果找不到cookie,则GB将是默认国家/地区。当我从IDE启动我的mvc站点时,我需要做什么呢?然后根据cookie值,默认url看起来像localhost:2010/uk或localhost:2010/de?给我一些想法。用户只需请求一个URL,整个网站就会切换到这种文化。您所需要做的就是创建一个简单的控件,在URL之间切换,然后工作就完成了(既比cookie简单,也比cookie好)。一旦一个区域性被请求,它将“粘住”,直到另一个区域性被请求,只要您使用路由生成URL。如果URL中有该区域性,则不需要cookie。您没有将区域性注入URL,用户通过URL请求区域性。请参阅:。我的网站有许多国旗。因此,当用户单击任何国家的国旗时,我们会在用户pc中删除带有国家代码的cookie,并显示基于国家代码的本地化数据,但当用户第一次来时,则不存在cookie,默认国家变为GB。但这并不意味着您需要cookie。如果您需要本地化的信息已经在URL中,那么您不需要它(也不应该使用它)。本地化是内容,而不是个性化。您应该将每个区域性放在URL中,以便搜索引擎可以用本地语言对其进行索引,而不是将其隐藏在搜索引擎永远不会提供的cookie后面。我的网站是基于cookie的。基本上,我有一个用webform开发的父网站,现在我必须用mvc开发另一个小网站,它将在我的主网站下运行,并从我的主网站读取cookie。如果找不到cookie,则GB将是默认国家/地区。当我从IDE启动我的mvc站点时,我需要做什么呢?然后根据cookie值,默认url看起来像localhost:2010/uk或localhost:2010/de?给我一些想法。用户只需请求一个URL,整个网站就会切换到这种文化。您所需要做的就是创建一个简单的控件,在URL之间切换,然后工作就完成了(既比cookie简单,也比cookie好)。一旦一个区域性被请求,它将“保持”直到另一个区域性被请求,只要您使用路由生成URL。
 protected void Application_BeginRequest(Object sender, EventArgs e)
        {
            string CountryCodeInUrl = "", redirectUrl="";
            var countryCode = CookieSettings.ReadCookie();
            if (countryCode=="")
            {
                countryCode = "gb";
            }

            if (HttpContext.Current.Request.RawUrl.Length >= 2)
            {
                CountryCodeInUrl = HttpContext.Current.Request.RawUrl.Substring(1, 2);
            }

            if (countryCode != CountryCodeInUrl)
            {
                if (HttpContext.Current.Request.RawUrl.Length >= 2)
                {
                    if (HttpContext.Current.Request.RawUrl.Substring(1, 2) != "")
                    {
                        countryCode = HttpContext.Current.Request.RawUrl.Substring(1, 2);
                    }
                }

                if(!System.Web.HttpContext.Current.Request.RawUrl.Contains(countryCode))
                {
                    redirectUrl = string.Format("/{0}{1}", countryCode, System.Web.HttpContext.Current.Request.RawUrl);
                }
                else
                {
                    redirectUrl = System.Web.HttpContext.Current.Request.RawUrl;
                }
                CookieSettings.SaveCookie(countryCode);
                System.Web.HttpContext.Current.Response.RedirectPermanent(redirectUrl);
            }

        }
public class CookieSettings
    {
        public static void SaveCookie(string data)
        {
            var _CookieValue= new HttpCookie("CountryCookie");
            _CookieValue.Value = data;
            _CookieValue.Expires = DateTime.Now.AddDays(300);
            HttpContext.Current.Response.Cookies.Add(_CookieValue);
        }

        public static string ReadCookie()
        {
            var _CookieValue = "";
            if (HttpContext.Current.Request.Cookies["CountryCookie"] != null)
                _CookieValue= HttpContext.Current.Request.Cookies["CountryCookie"].Value;
            return _CookieValue;
        }
    }
public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "DefaultCountry",
                url: "{countrycode}/{controller}/{action}/{id}",
                defaults: new {countrycode="gb", controller = "Home", action = "Index", id = UrlParameter.Optional }
            );

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
public ActionResult Index(string countrycode)
{
    return View();
}