Ozeki ng SMSゲートウェイを使用しています。どのモバイルにもSMSを送信できません。SMSネットからモバイルへ
潜在的に危険なRequest.Form値がクライアントから検出されました(textboxError = "。この値を設定した後、Pageディレクティブまたは構成セクションでvalidateRequest =" false "を設定することにより、要求の検証を無効にできます。ただし、これは強力です。この場合、アプリケーションですべての入力を明示的にチェックすることをお勧めします。詳細については、 http://go.Microsoft.com/fwlink/?LinkId=1531 を参照してください。
例外の詳細:System.Web.HttpRequestValidationException:潜在的に危険なRequest.Form値がクライアントから検出されました(textboxError = "
そして私のcsファイルは
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Net;
using System.Text.RegularExpressions;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
textboxRecipient.Width = 400;
textboxMessage.Width = 450;
textboxMessage.Rows = 10;
textboxError.Width = 400;
textboxError.Rows = 5;
textboxError.ForeColor = System.Drawing.Color.Red;
textboxError.Visible = false;
textboxError.Text = "";
if (!Page.IsPostBack)
{
textboxRecipient.Text = "+441234567";
textboxMessage.Text = "Hello World!";
}
}
protected void buttonSendOnClick(object sender, EventArgs e)
{
//are required fields filled in:
if (textboxRecipient.Text == "")
{
textboxError.Text += "Recipient(s) field must not be empty!\n";
textboxError.Visible = true;
return;
}
//we creating the necessary URL string:
string ozSURL = "http://127.0.0.1"; //where Ozeki NG SMS Gateway is running
string ozSPort = "9501"; //port number where Ozeki NG SMS Gateway is listening
string ozUser = HttpUtility.UrlEncode("admin"); //username for successful login
string ozPassw = HttpUtility.UrlEncode("admin"); //user's password
string ozMessageType = "SMS:TEXT"; //type of message
string ozRecipients = HttpUtility.UrlEncode(textboxRecipient.Text); //who will get the message
string ozMessageData = HttpUtility.UrlEncode(textboxMessage.Text); //body of message
string createdURL = ozSURL + ":" + ozSPort + "/httpapi" +
"?action=sendMessage" +
"&username=" + ozUser +
"&password=" + ozPassw +
"&messageType=" + ozMessageType +
"&recipient=" + ozRecipients +
"&messageData=" + ozMessageData;
try
{
//Create the request and send data to Ozeki NG SMS Gateway Server by HTTP connection
HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(createdURL);
//Get response from Ozeki NG SMS Gateway Server and read the answer
HttpWebResponse myResp = (HttpWebResponse)myReq.GetResponse();
System.IO.StreamReader respStreamReader = new System.IO.StreamReader(myResp.GetResponseStream());
string responseString = respStreamReader.ReadToEnd();
respStreamReader.Close();
myResp.Close();
//inform the user
textboxError.Text = responseString;
textboxError.Visible = true;
}
catch (Exception)
{
//if sending request or getting response is not successful Ozeki NG SMS Gateway Server may do not run
textboxError.Text = "Ozeki NG SMS Gateway Server is not running!";
textboxError.Visible = true;
}
}
}
そして私のaspページは
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Ozeki NG SMS Gateway Message Sending Example</title>
</head>
<body>
<center>
<form id="smsdata" runat="server">
<asp:Table id="smstable" runat="server" style="text-align:left; border-width:thin; border-color:Silver;" BorderStyle="Solid">
<asp:TableRow>
<asp:TableCell ColumnSpan="2">
<b>Compose a message:</b>
<br />
<br />
</asp:TableCell>
</asp:TableRow>
<asp:TableRow>
<asp:TableCell HorizontalAlign="Left" VerticalAlign="Top">
<asp:Label ID="labelRecipient" runat="server" Text="Recipient: "></asp:Label>
</asp:TableCell>
<asp:TableCell>
<asp:TextBox ID="textboxRecipient" runat="server"></asp:TextBox>
</asp:TableCell>
</asp:TableRow>
<asp:TableRow>
<asp:TableCell HorizontalAlign="Left" VerticalAlign="Top">
<asp:Label ID="labelMessage" runat="server" Text="Message Text: "></asp:Label>
</asp:TableCell>
<asp:TableCell>
<asp:TextBox ID="textboxMessage" runat="server" TextMode="MultiLine"></asp:TextBox>
</asp:TableCell>
</asp:TableRow>
<asp:TableRow>
<asp:TableCell ColumnSpan="2" HorizontalAlign="Center">
<asp:Button ID="buttonSend" runat="server" Text="Send Message" OnClick="buttonSendOnClick" />
</asp:TableCell>
</asp:TableRow>
<asp:TableRow>
<asp:TableCell ColumnSpan="2" HorizontalAlign="Center">
<asp:TextBox ID="textboxError" runat="server" BorderStyle="None" TextMode="MultiLine"></asp:TextBox>
</asp:TableCell>
</asp:TableRow>
</asp:Table>
</form>
</center>
</body>
</html>
問題は、フィールドの1つの値(textboxError)にXMLまたはHTMLスタイルのタグが含まれていることです。これらのタグは、開発者がアプリケーション内に潜在的なセキュリティ問題を導入することを避けるために、デフォルトでは許可されていません。
解決策はエラーメッセージに示されています。上部の@Pageディレクティブ(サンプルでは省略)またはweb.configのいずれかにvalidateRequest="false"
を追加する必要があります。
.net 4を使用している場合は、web.configを少し変更し、次を追加して、2.0から検証モードに戻す必要があることに注意してください。
<system.web>
<httpRuntime requestValidationMode="2.0" />
</system.web>
RequestValidationModeの詳細については、 requestValidationModeに関するこのMSDNの記事 を参照してください。
問題は、フィールドの1つの値(textboxError)にXMLまたはHTMLスタイルのタグが含まれていることです。これらのタグは、開発者がアプリケーション内に潜在的なセキュリティ問題を導入することを避けるために、デフォルトでは許可されていません。
解決策はエラーメッセージに示されています。追加する必要があります
[HttpPost]
[ValidateInput(false)]
コントローラー内
1つのフィールドでのみ検証を無効にできる次のソリューションを見つけました! (ページ全体で無効にするのは嫌です)
vb.net:
Public Class UnvalidatedTextBox
Inherits TextBox
Protected Overrides Function LoadPostData(postDataKey As String, postCollection As NameValueCollection) As Boolean
Return MyBase.LoadPostData(postDataKey, System.Web.HttpContext.Current.Request.Unvalidated.Form)
End Function
End Class
c#:
public class UnvalidatedTextBox : TextBox
{
protected override bool LoadPostData(string postDataKey, NameValueCollection postCollection)
{
return base.LoadPostData(postDataKey, System.Web.HttpContext.Current.Request.Unvalidated.Form);
}
}
<prefix:UnvalidatedTextBox id="test" runat="server" />
の代わりに<asp:TextBox
を使用すると、すべての文字が許可されます(これはパスワードフィールドに最適です!)
これは私のために働いた...
[HttpPost, ValidateInput(false)]
public ActionResult updateContact(FormModel model)
{
//contents
}