c# - kentico 无法修剪字符串,错误 outOfBoundException

标签 c# split substring transformation kentico

我正在尝试通过获取 youtube iframe 的 src 并将其用作 标签的 src 来从 iframe 标签切换到 标签,我已经将视频源作为一个大字符串放在页面表单中并通过这个 char '|' 将它分成更小的部分所以每个 标签都知道他必须引用哪个 src 索引。我的问题是我想使用这种格式拍摄 youtube 视频的图像:

https://img.youtube.com/vi/<insert-youtube-video-id-here>/hqdefault.jpg

从拆分的字符串中,为了得到这张图片,我试图重新拆分源字符串,以获取视频 ID(并因此获得视频图像),下面是我的代码:

 protected void Page_Load(object sender, EventArgs e)
{


    string [] values = ImageFieldValues.Split('|');
    if (values.Length != 0) { 
    foreach (string source in values)
    {

        litCon.Text = "<a name='testiFrame' data-fancybox-type='iframe' id='runtimeIFrame' class='col-xs-3 various fancybox.iframe' style='margin-bottom: 10px;float: right;'  href='" + source+ "'><img id='iframeImage' src='http://img.youtube.com/vi/"+ source.Substring(26) + "/hqdefault.jpg'/></a>";
        AddToDivImages.Controls.Add(litCon);


    }
    }
}

这是在 kentico 项目的转换中使用的自定义控件,视频源加载正常,唯一的问题是 source.substring(26),它返回一个错误,指出索引超出边界,它只是为索引 (0) 工作,任何大于零的数字都会返回相同的错误,我还尝试修剪、拆分、删除...就像将整个字符串作为一个 block 一样,这是事件日志的屏幕截图在肯蒂科 Event Logs

最佳答案

如果没有看到 ImageFieldValues 的初始值,很难说它为什么不起作用。可能是您有一个空字符串(由字符串末尾的附加管道创建)?尝试使用 Split 的重载来删除空条目:

ImageFieldValues.Split(new[] { "|"}, StringSplitOptions.RemoveEmptyEntries);

根据上面的内容,我假设 ImageFieldValues 看起来像这样:

https://www.youtube.com/watch?v=dQw4w9WgXcQ|https://www.youtube.com/watch?v=wZZ7oFKsKzY

您可能想尝试使用正则表达式,而不是使用子字符串。我看了一下,您应该能够通过以下方式实现您的目标:

protected void Page_Load(object sender, EventArgs e)
{
    string pattern = "watch\\?v=(?<code>[A-Za-z0-9_]*)";

    string [] values = ImageFieldValues.Split('|');
    if (values.Length != 0) { 
    foreach (var source in values)
    {
        Match match = Regex.Match(source, pattern);

        litCon.Text = "<a name='testiFrame' data-fancybox-type='iframe' id='runtimeIFrame' class='col-xs-3 various fancybox.iframe' style='margin-bottom: 10px;float: right;'  href='" + source + "'><img id='iframeImage' src='http://img.youtube.com/vi/"+ match.Groups["code"].Value + "/hqdefault.jpg'/></a>";
        AddToDivImages.Controls.Add(litCon);
    }
}

这消除了对您为 source.Substring 使用的索引的依赖,如果 URL 结构发生变化,它将保护您。如果您不熟悉正则表达式,可以在此处找到模式的分割:https://regex101.com/r/3Y0ZNY/1

关于c# - kentico 无法修剪字符串,错误 outOfBoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47607498/

相关文章:

c# - HttpClient https 请求使用主机名失败,但使用 IP 地址有效

javascript - 如何拆分添加子属性名称的 JSON 属性值?

Java 截断 punct {.} 之前的字符串

ios - NSStrings 的 NSArray 在一个对象中只返回一个大字符串,我需要很多对象

c# - 串行通信 - 字节流

c# - 在最终等待之前从异步方法返回是否可以?

c# - WPF/WinForms/GDI 互操作 : converting a WriteableBitmap to a System. Drawing.Image?

list - pythonic方式来分割列表?

perl - split inside map 是如何工作的?

r - 根据一列的字符和另一列的条件创建新列