1

我创建了一个表格供客户从网站请求信息。然后表单使用 Webmail.Send 向我发送一封电子邮件。如果用户尝试输入部分或全部 html 开始标记,即“<h1”或“<h1>”,站点将抛出错误。我使用 WebMatrix 开发了该站点,并尝试使用 Html.Encode() 解决此问题。如果我在 Html.Encode("<h1>") 中硬编码,一切都很好,电子邮件已发送并且 html 标记在电子邮件中看起来很棒。如果我尝试使用变量 Html.Encode(firstName),如果用户输入部分或全部 html 开始标记,则站点会崩溃。如果用户输入的内容看起来不像 html,那么一切都很好,即“Steve”。以下是我遇到问题的代码。

    var customerEmail = Request["customerEmail"];
    var firstName = Request["firstName"];
    var lastName = Request["lastName"];
    var phoneNumber = Request["phoneNumber"];
    var customerRequest = Request["customerRequest"];
    var rAddress = Request["rAddress"];
    var rCity = Request["rCity"];
    var rState = Request["rState"];
    var rZip = Request["rZip"];

    try
        {
            WebMail.Send(to:"request@yourdomain.com", subject: "Request from " + customerEmail, body: 
            "Request:<br>_____________________________________<br><br>" +
            customerRequest + "<br><br>Contact Info:<br>_____________________________________<br><br>" + Html.Encode(firstName)  + " " + lastName + "<br>" + rAddress + 
            "<br>" + rCity + " " + rState + " " + rZip + "<br>" + phoneNumber + "<br>" + customerEmail, replyTo: customerEmail);
        }
    catch (Exception ex )
        {
            <text>@ex</text>
        }

我知道所有输入都可能出现问题,但是一旦我弄清楚第一个输入,这将很容易解决。

4

1 回答 1

2

如果您允许用户将 HTML 作为其表单提交的一部分发布,您必须使用Request.Unvalidated()来引用表单字段值以防止 ASP.NET 请求验证启动(这会导致您报告的错误消息):

var firstName = Request.Unvalidated("firstName");
var lastName = Request.Unvalidated("lastName");
于 2013-03-09T07:54:27.667 回答