替换请求的URL部分

时间:2014-12-04 18:48:44

标签: c# asp.net regex

我的网站包含网址中的语言说明符(例如http://example.org/English/rest/of/url.aspx

使用正则表达式,我可以解析URL的语言:

Match match = Regex.Match(HttpContext.Current.Request.AppRelativeCurrentExecutionFilePath, "^~/(?<language>[^/]+)/");

然后我可以检查已解析的语言并确定语言是否符合我的要求:

match.Groups["language"].Value

我现在正在寻找一种比野蛮的字符串操作更简单的方法,以便在需要时用新语言替换该语言。

因此,上述网址将更改为http://example.org/German/rest/of/url.aspx

我最初的想法是一个简单的搜索/替换,但由于页面名称或其他URL片段中可能包含语言名称,因此无法正常工作。我只关心根URL之后的第一个片段。

更改URL后,我会重定向用户并完成它。

2 个答案:

答案 0 :(得分:1)

或者您可以使用Regex.Replace

string requestUrl = "~/English/rest/of/url.aspx";
string targetLanguage = "German";
Match match = Regex.Match(requestUrl, "^~/(?<language>[^/]+)/");
if (match.Groups["language"].Value != targetLanguage)
    Response.Redirect(Regex.Replace(requestUrl, "^~/[^/]+/", string.Format("~/{0}/", targetLanguage)));

答案 1 :(得分:0)

你可以创建一个Uri对象然后使用PathAndQuery提取当时的路径拆分'/'并替换第一个实例然后再构建你的uri