如何匹配 ASP.NET MVC 中任意 URL 路径的最后一段?

问题描述 投票:0回答:2

我有几个控制器操作应该由 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

...但这也不匹配。

这看起来很简单,但我似乎找不到正确的模式。

c# asp.net-mvc routes
2个回答
0
投票

如果不是正则表达式呢:

if(Path.Split('/').Last() == do-this-other-thing)

0
投票

您想提取网址的最后一部分,即“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());
}
© www.soinside.com 2019 - 2024. All rights reserved.