当我尝试发布包含<whatever>
的任何内容时,我会
潜在危险的Request.Form 从客户端检测到的值 描述:请求验证有 检测到有潜在危险 客户输入值和处理 请求已中止。这个 值可能表示尝试 妥协你的安全 应用程序,例如跨站点 脚本攻击。允许页面 覆盖申请请求 验证设置,设置 requestValidationMode属性 httpRuntime配置部分 requestValidationMode = “2.0”。例: 。后 设置此值,您就可以了 通过设置禁用请求验证 页面中的validateRequest =“false” 指令或在 配置部分。但是,确实如此 强烈推荐你的 应用程序明确检查所有 在这种情况下输入。更多 信息,见 http://go.microsoft.com/fwlink/?LinkId=153133
异常详细信息: System.Web.HttpRequestValidationException: 一个有潜在危险的Request.Form 从客户端检测到值
我有以下asp.net代码
<asp:DetailsView ID="newsDetail" runat="server" DataSourceID="SqlDataSourceNews"
AutoGenerateRows="False" DataKeyNames="id"
OnItemUpdating="NewsDetailItemUpdating" OnItemCreated="NewsDetailItemCreated"
OnItemDeleted="NewsDetailItemDeleted" OnItemInserted="NewsDetailItemInserted"
OnItemInserting="NewsDetailItemInserting" OnItemUpdated="NewsDetailItemUpdated"
DefaultMode="Insert">
<Fields>
<asp:TemplateField FooterText="show at statpage" HeaderText="view" SortExpression="view">
...
</asp:TemplateField>
<asp:BoundField DataField="headline" HeaderText="Headline" SortExpression="headline">
</asp:BoundField>
<asp:TemplateField HeaderText="Text">
<ItemTemplate>
<asp:Label ID="post" runat="Server" Text='<%# Eval("post") %>' OnPreRender="PostLabelPreRender" />
</ItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="postTextBox" runat="server" Text='<%# Bind("post") %>' TextMode="MultiLine"
Width="500px" Height="300px" />
</InsertItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="postTextBox" runat="server" Text='<%# Bind("post") %>' TextMode="MultiLine"
Width="500px" Height="300px" />
</EditItemTemplate>
</asp:TemplateField>
代码
protected void NewsDetailItemUpdating(object sender, DetailsViewUpdateEventArgs e)
{
// Iterate though the values entered by the user and HTML encode
// the values. This helps prevent malicious values from being
// stored in the data source.
for (int i = 0; i < e.NewValues.Count; i++)
if (e.NewValues[i] != null)
e.NewValues[i] = Server.HtmlEncode(e.NewValues[i].ToString());
}
protected void NewsDetailItemInserting(object sender, DetailsViewInsertEventArgs e)
{
for (int i = 0; i < e.Values.Count; i++)
if (e.Values[i] != null)
e.Values[i] = Server.HtmlEncode(e.Values[i].ToString());
}
protected void NewsDetailItemUpdated(object sender, DetailsViewUpdatedEventArgs e)
{
newsList.DataBind();
}
protected void NewsDetailItemInserted(object sender, DetailsViewInsertedEventArgs e)
{
newsList.DataBind();
}
protected void NewsDetailItemDeleted(object sender, DetailsViewDeletedEventArgs e)
{
newsList.DataBind();
}
protected void NewsDetailItemCreated(object sender, EventArgs e)
{
newsList.DataBind();
}
答案 0 :(得分:8)
您遇到的问题是,您在其中一个文本框中放置了html标签或只是&lt; &GT;符号和.net框架将其视为潜在的危险脚本。这是为了防止人们在输入字段中放入恶意脚本标记。
您可以通过添加页面指令ValidateRequest="false"
来解决此问题,您还必须将其放入web.config requestValidationMode="2.0"
答案 1 :(得分:1)
试试这个web.config文件 将httpRuntime requestValidationMode添加或设置为
<httpRuntime requestValidationMode="2.0"/>