Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更换未按预期工作的剃须刀发动机,插入不需要的周期_C#_.net_Razor_Replace - Fatal编程技术网

C# 更换未按预期工作的剃须刀发动机,插入不需要的周期

C# 更换未按预期工作的剃须刀发动机,插入不需要的周期,c#,.net,razor,replace,C#,.net,Razor,Replace,我有一个类,它使用razor引擎生成html模板,似乎有一个问题,一些链接(锚或图像)在地址中插入了一个额外的句点,通常是在www.部分,这使得链接无法使用 在何时何地这样做似乎没有任何押韵或理由,有时效果很好,有时几个链接都有这个问题 因此,当我以字符串形式返回模板,然后以电子邮件形式发送时,我会调用替换,如下所示: var fixedTemplate = template.Replace("www..", "www."); 但这不起作用。我以前从未遇到过这个问题。字符串非常大,这会导致re

我有一个类,它使用razor引擎生成html模板,似乎有一个问题,一些链接(锚或图像)在地址中插入了一个额外的句点,通常是在www.部分,这使得链接无法使用

在何时何地这样做似乎没有任何押韵或理由,有时效果很好,有时几个链接都有这个问题

因此,当我以字符串形式返回模板,然后以电子邮件形式发送时,我会调用替换,如下所示:

var fixedTemplate = template.Replace("www..", "www.");
但这不起作用。我以前从未遇到过这个问题。字符串非常大,这会导致replace函数出现问题吗

我怎么能

a) 修复razor引擎,使这些随机周期不再添加到链接中

b) 找出为什么replace函数没有替换所有的事件

下面是在我的类中调用的完整代码示例

// nt = class associated with template     
using (TemplateService templateService = new TemplateService())
{
string html = templateService.Parse(File.ReadAllText(nt.TemplateFilePath), nt, null, null);

var pm = new PreMailer.Net.PreMailer(html);
//inline css styles with premailer    
Emailer.SendTestEmail(pm.MoveCssInline().Html, emailAddress, "Test Email: " + campaign.Title);
pm = null;
}
以及调用replace的emailer代码

public static void SendTestEmail(string template, string emailAddress, string subject)
        {
            var updatedTemplate = template.Replace("www..", "www.");

            var email = new MailMessage
            {

                Body = updatedTemplate,
                Subject = subject,
                IsBodyHtml = true,
                From = new MailAddress("noreply@mydomain.com")
            };
            email.To.Add(emailAddress);

            using (var smtpClient = new SmtpClient())
            {
                smtpClient.PickupDirectoryLocation = "M:\\Pickup";
                smtpClient.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory;
                smtpClient.Send(email);
            }
        }

我建议,如果Replace不能解决问题,那么问题发生在包含Replace的代码段之后。Replace经过了很好的测试,可以处理大字符串(尽管它可能不是替换文本的最有效的方法)。您是否已逐级查看代码,以查看替换前后是否存在双点“www…”是的,只是逐级替换并不是替换所有出现的情况,而是在替换前后存在双点。我非常清楚replace函数是如何尝试和测试的,但是这里有一些东西导致它无法工作。或者我错过了什么。上面的代码是从我的项目中直接复制和粘贴的,我没有简化它,唯一的变化是from邮件地址中的域名,替换后字符串的唯一变化是它被分配给邮件对象的body属性。也许它不仅仅是一个双点?可能有隐藏/特殊字符?如果您直接从
模板
复制并粘贴“www..”并将其粘贴到其他替换中,则可能会识别文本是否异常。(记住从失败的实例复制值。)另外,您是否确定在替换失败时,您没有收到三个点<代码>“www..”。替换(“www..”、“www.”将导致
“www..”
。Hi@Ulric,强制将字符串编码为UTF8似乎解决了问题!