ASP.Net MVC:如何将国家代码添加到所有 url
ASP.Net MVC: How to add country code to all url
我有两个要求
第一个是:我的要求是为所有 url 添加国家代码。在我的 url 看起来像
之前
www.mysite.net/catalog.aspx
www.mysite.net/product.aspx
www.mysite.net/cart.aspx
但现在我必须在全局位置编写一些代码,这将在所有 url 中注入 2 个字符的国家/地区代码,只是读取 cookie 值。所以我的新 url 看起来像
www.mysite.net/uk/catalog.aspx
www.mysite.net/uk/product.aspx
www.mysite.net/uk/cart.aspx
所以告诉我我需要在网站的全球区域添加什么代码,在 url 中注入国家代码。
第二个是:如果国家代码将被注入到浏览器地址栏的 url 中,那么我所有页面中的所有链接都应该具有相同的国家代码。
如果可能的话,用代码示例和提示来讨论这个问题。一个人告诉我下载并安装 IIS URL 重写模块,但我不知道 IIS IIS URL 重写模块如何注入从国家 cookie 中读取的国家代码。我想我需要为此添加一些代码。
我可以通过 asp.net mvc 中的 url 路由来解决它吗?寻求帮助。
谢谢
这样我就完成了工作。所以我喜欢分享可能对别人有帮助的东西。
我的Application_BeginRequest长得像
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);
}
}
Cookie 设置 class
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();
}
本期结束。
我有两个要求
第一个是:我的要求是为所有 url 添加国家代码。在我的 url 看起来像
之前www.mysite.net/catalog.aspx
www.mysite.net/product.aspx
www.mysite.net/cart.aspx
但现在我必须在全局位置编写一些代码,这将在所有 url 中注入 2 个字符的国家/地区代码,只是读取 cookie 值。所以我的新 url 看起来像
www.mysite.net/uk/catalog.aspx
www.mysite.net/uk/product.aspx
www.mysite.net/uk/cart.aspx
所以告诉我我需要在网站的全球区域添加什么代码,在 url 中注入国家代码。
第二个是:如果国家代码将被注入到浏览器地址栏的 url 中,那么我所有页面中的所有链接都应该具有相同的国家代码。
如果可能的话,用代码示例和提示来讨论这个问题。一个人告诉我下载并安装 IIS URL 重写模块,但我不知道 IIS IIS URL 重写模块如何注入从国家 cookie 中读取的国家代码。我想我需要为此添加一些代码。
我可以通过 asp.net mvc 中的 url 路由来解决它吗?寻求帮助。
谢谢
这样我就完成了工作。所以我喜欢分享可能对别人有帮助的东西。
我的Application_BeginRequest长得像
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);
}
}
Cookie 设置 class
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();
}
本期结束。