2015-09-15 2 views
2

Я работаю над веб-сайтом, который должен отправить сообщение электронной почты с URL-адресом в нем, однако URL-адрес печатается с лишним «;» в этом. Например:URL-адрес в строке, поврежденной апострофом

Для того, чтобы нам продолжать с вашим запросом, пожалуйста, нажмите here, чтобы подтвердить свой адрес электронной почты или вставьте ссылку в свой браузер: http://localhost/Account/ConfirmEmail?userId=605fa142&code;=7fBi8oRavW6C

Второй экземпляр у вышеуказанного URL не должно быть ';' после параметра 'code'. Вы заметите, что URL-адрес в <a href>here</a> не имеет дополнительного апострофа. Я пробовал это с IE и Chrome и получал тот же результат. Я подозреваю, что браузер помещает апостроф, но я не знаю, почему.

Текст электронной почты извлекается из файла ресурса:

<p>Dear {0}<p></BR><p>Thank you for signing up to access the Extranet with the email address {1}.</p><p>In order for us to continue with your request, please click <a href="{2}">here</a> to confirm your email address or paste the following link in to your browser:</BR><a href="{2}">{2}</a> 

и заполняется детали с помощью string.format():

string.Format(ConfirmEmailBody, firstName, email, callbackUrl) 

Я боролся с этим в течение последних нескольких часов , единственное, о чем я могу думать, это то, что последовательность &code= имеет какое-то значение. Кто-нибудь еще видел это раньше?

EDIT 1

В CallBackURL генерируется с этим кодом:

var callbackUrl = Url.Action("ConfirmEmail", "Account", 
       new { userId = userID, code = code }, protocol: Request.Url.Scheme); 

Я поставить точку останова в VS после создания CallBackURL и URL генерируется не содержат апостроф.

EDIT 2

кажется, что 'код' не имеет никакого значения. Я изменил параметры URL и браузеры напечатать строку с лишними апострофами для каждого параметра:

localhost/Account/ConfirmEmail?userId=80216107-1d0e-432c-88cc-69f18be2111e&foo;=wibble&bar;=wobble 
+0

Вы устранили очевидную возможность? т. е. помещая точку останова на строку 'string.Format (...)', чтобы увидеть, действительно ли у callbackUrl'а этот дополнительный _semicolon_? –

+0

Да, там ничего нет. Тот же параметр ('callbackUrl') вводится в двух местах с помощью '{2}'. – GrandMasterFlush

+1

Не уверен, что это ошибка копирования-вставки, но есть и другая разница между вашими URL-адресами: одна в «Здесь» содержит другой идентификатор пользователя (имеет в конце «2») –

ответ

2

Что-то, кажется, пытается интерпретировать &code как последовательность побега HTML, и добавляет точку с запятой для завершения последовательности.

Вам нужно будет избежать строки, прежде чем добавлять ее к необработанному html, меняя & на &amp;.

0

Исходя из C.Evenhuis ответа, я изменил string.format от:

string.Format(ConfirmEmailBody, FirstName, Email, callbackUrl) 

к:

string.Format(ConfirmEmailBody, FirstName, Email, callbackUrl, callbackUrl.Replace("&","&amp;")) 

Первый экземпляр CallBackURL используется в <a href> тегов в то время как второй экземпляр используется для сброса на экран. Теперь его можно вырезать, вставить в браузер и отлично работать. Это не отвечает на мой вопрос о том, почему веб-браузеры делают это, но, по крайней мере, он работает.

Смежные вопросы