1

aspテキストボックスでHTMLを許可しようとしていますが、ボタンをクリックするだけで、次のエラーが返されます。

Uncaught Sys.WebForms.PageRequestManagerServerErrorException:Sys.WebForms.PageRequestManagerServerErrorException:サーバーでの要求の処理中に不明なエラーが発生しました。サーバーから返されたステータスコードは404でした。」

テキストボックスでHTMLをエンコードするために使用しているサーバーサイドの1つですServer.HtmlEncodeが、それでも結果が得られません。web.configでブレークポイント、、を使用しAutoEventWireup="false"ValidateRequest="false"ページ検証をfalseに設定してみました。自分のページでも使っValidateRequest="false"てみました。また、このエラーを返していますA potentially dangerous Request.Form value was detected from the client (ctl00$ContentPlaceHolder1$testBox="<test")。サーバー側とクライアント側のコードは次のとおりです。

--Client side--
<asp:TextBox runat="server" ID="testBox" />
<asp:Button runat="server" OnClick="testHtmlEncode" />

--Server side--
protected void testHtmlEncode(Object sender, EventArgs e) {
console.write(Server.HtmlEncode(testBox.Text));
}
4

2 に答える 2

1

私はそれをこのaspxで動作させることができました:

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" ValidateRequest="false" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:TextBox runat="server" ID="txtValue"></asp:TextBox>
        <asp:Button runat="server" ID="btnSubmit" OnClick="btnSubmit_Click" Text="submit"/>
    </div>
    </form>
</body>
</html>

このweb.config

<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.5"/>
    <httpRuntime targetFramework="4.5" requestValidationMode="2.0"/>
  </system.web>
</configuration>

この.aspx.cs

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        Console.WriteLine(txtValue.Text);
    }
}
于 2013-03-14T19:38:49.150 に答える
1

<httpRuntime requestValidationMode="2.0" />web.configで試してください

ページ上と一緒ValidateRequest="false"に。

ID="btnSubmit"あなたにボタンを追加

編集:

まず、私はあなたの元のエラーをグーグルで検索します。あなたはその仕事をすることができるはずです。開発用Webサーバーを停止して再実行してみてください(タスクバーのアイコン)。

https://www.google.com/?q=A+potentially+dangerous+Request.Form+value+was+detected+from+the+client

jQueryソリューションの場合:

.aspx.cs内

[WebMethod]
  public static void MyMethod(string myTextBoxValue)
  {
    //do something
  }

.aspxで

var txtValue= $('#<%=testBox.ClientID%>').val();
        if (!txtValue) {
            txtValue= 0;
        }
        var objJSON = {
            myTextBoxValue: txtValue
        };
        var encoded = JSON.stringify(objJSON);

$.ajax({
  type: "POST",
  url: "PageName.aspx/MyMethod",
  data: encoded,
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  success: function(msg) {
    // Do something interesting here.
  }
});

編集2: テキストボックスにあるものを使用して直接SQL呼び出しを行っていないことを確認してください。そうすれば、SQLインジェクション攻撃にさらされる可能性があります。そもそもasp.netが「<」をブロックしていたのはそのためです。

編集3 それが重要かどうかはわかりませんが、asp:ButtonにはID属性がありません

于 2013-03-14T18:43:01.000 に答える