我有几个控制器操作应该由 last URL 段触发。例如:
/this/is/a/path/do-this-thing
/this/is/also/a/path/do-this-other-thing
do-this-thing
和 do-this-other-thing
是我想要匹配的部分。前面的路径可以是任何东西(在下面的示例中,我尝试将前面的内容捕获为名为 path
的变量)。
我在编码时遇到问题。通配符模式只能出现在末尾,所以这不起作用(它会抛出异常):
{*path}/do-this-thing
我尝试了正则表达式...
{path:regex(.*)}/do-this-thing
...但这也不匹配。
这看起来很简单,但我似乎找不到正确的模式。
如果不是正则表达式呢:
if(Path.Split('/').Last() == do-this-other-thing)
您想提取网址的最后一部分,即“slug”吗?你可以使用这个方法:
public static string? GetLastSegment(string relativeOrAbsoluteUrl)
{
if (String.IsNullOrWhiteSpace(relativeOrAbsoluteUrl)
|| !Uri.TryCreate(relativeOrAbsoluteUrl, UriKind.RelativeOrAbsolute, out Uri? url))
{
return null;
}
return url.IsAbsoluteUri ? (url.Segments.LastOrDefault()?.TrimEnd('/')) : (relativeOrAbsoluteUrl?.TrimEnd('/').Split('/').Last());
}