我想从url获取lastindexof来自数据库的基于' \'或者' //'
比如说我有这样的字符串
Administration\Masters\EmployeePulseDetailsMaster.aspx
Administration/Masters/SearchKnowYourCollegues.aspx
Administration//SMS//PushSMS.aspx
我正在使用该代码
foreach (var item in SessionClass.UserDetails.SubModules)
{
if (Request.RawUrl.Contains(item.PageURL.Substring(item.PageURL.LastIndexOf('\\') + 1))
|| Request.RawUrl.Contains(item.PageURL.Substring(item.PageURL.LastIndexOf('/') + 1)))
{
Response.RedirectPermanent("~/Login.aspx");
}
}
答案 0 :(得分:2)
您可以使用正则表达式通过构造如下所示的正则表达式来查找组中任何字符的最后一个匹配项:
[target-group][^target-group]*$
在您的情况下,目标群组为[/\\]
,因此搜索结果如下:
var match = Regex.Match(s, @"[/\\][^/\\]*$");
这是一个正在运行的例子:
var data = new[] {
@"quick/brown/fox"
, @"jumps\over\the\lazy\dog"
, @"Administration\Masters\EmployeePulseDetailsMaster.aspx"
, @"Administration/Masters/SearchKnowYourCollegues.aspx"
, @"Administration//SMS//PushSMS.aspx"
};
foreach (var s in data) {
var m = Regex.Match(s, @"[/\\][^/\\]*$");
if (m.Success) {
Console.WriteLine(s.Substring(m.Index+1));
}
}
打印
fox
dog
EmployeePulseDetailsMaster.aspx
SearchKnowYourCollegues.aspx
PushSMS.aspx
答案 1 :(得分:1)
我想您要确定当前页面的名称是否在SessionClass.UserDetails.SubModules
列表中。然后,我使用Request.Url.Segments.Last()
仅获取当前页面的名称(f.e。PushSMS.aspx
)和System.IO.Path.GetFileName
以获取每个网址的名称。 GetFileName
适用于/
或\
:
string pageName = Request.Url.Segments.Last();
bool anyMatch = SessionClass.UserDetails.SubModules
.Any(module => pageName == System.IO.Path.GetFileName(module.PageURL));
if(anyMatch) Response.RedirectPermanent("~/Login.aspx");
您需要为using System.Linq;
添加Enumerable.Any
。