post表单数据到另一个页面没有__VIEWSTATE变量在查询字符串
本文关键字:VIEWSTATE 变量 字符串 查询 数据 表单 另一个 post | 更新日期: 2023-09-27 18:18:22
目前我正在与我的ASP支付网关集成工作。. NET应用程序,其中我必须使用GET方法将几个表单变量发布到支付网关页面。当我使用简单的HTML页面使用表单控件来保存值并将其发布到外部支付网关页面时,一切都很好。
当我试图从我的ASP内部做到这一点。NET c#应用程序,我得到错误"验证视图状态MAC失败。如果此应用程序由Web Farm或集群托管,请确保配置指定相同的validationKey和验证算法。不能在集群中使用AutoGenerate。在检查从我的asp.net c#页面发布到外部支付网关页面的查询字符串时,有一个额外的__VIEWSTATE变量附加到我想要的查询字符串,它包含我想要发布到支付网关页面的变量值。
我已经使EnableViewState="false" EnableEventValidation="false" EnableViewStateMac="false"到<%Page%> ASPX页面中的指令,并添加了"this "。EnableViewState = false"在代码后面被重写的onLoad方法中。
作为参考,添加下面的代码片段:
ASPX page
<body>
<%--<form id="pgform" name="pgform" action="http://xxx.xx.xx.xx:xxxx/_layouts/Portal/EWallet_BillDesk_Dummy.aspx" method="post" runat="server"> --%>
<form id="pgform" name="pgform" action="http://xxx.xxx.xx.xx:xxxx/PaymentGateway.aspx"
method="get" target="_blank" runat="server">
<asp:HiddenField ID="mid" runat="server"></asp:HiddenField>
<asp:HiddenField ID="mtrxid" runat="server"></asp:HiddenField>
<asp:HiddenField ID="mitem" runat="server"></asp:HiddenField>
<asp:HiddenField ID="amount" runat="server"></asp:HiddenField>
<script type="text/javascript">
document.pgform.submit();
//alert("connector fired");
</script>
</form>
</body>
代码后面
protected override void OnLoad(EventArgs e)
{
this.EnableViewState = false;
base.OnLoad(e);
}
protected void Page_Load(object sender, EventArgs e)
{
byte[] EncrKeyStream = Encoding.UTF8.GetBytes("nlxcK}~MWgf1WxrT");
if (Request.QueryString["c"] != null)
{
string qry = ConvertHexToString(Request.QueryString["c"]);
string strApplicationNo = qry.Split('|')[0];
string strTxnAmount = "1";//qry.Split('|')[1];
string mtrxId = "ABCMI" + strApplicationNo;
string mItem = "MOTOR INSURANCE";
string encmtrxId = EncryptDecrypt.Encrypt(mtrxId, EncrKeyStream);
string encmItem = EncryptDecrypt.Encrypt(mItem, EncrKeyStream);
string encAmount = EncryptDecrypt.Encrypt(strTxnAmount, EncrKeyStream); ;
mid.Value = "ABC_DEV";
mtrxid.Value = encmtrxId;
mitem.Value = encmItem;
amount.Value = encAmount;
}
}
请在这方面帮助我。我现在真的需要这个解决方案,已经好几个小时了& &;我找不到一个解决办法。请求您的帮助。
提前感谢。
不要使用<form runat="server" />
或服务器端控件。使用标准的<form>
和正常的<input>
字段(都没有runat="server")代替。这样ASP。. NET不会代表你生成视图状态或其他隐藏字段,你可以跨主机提交表单。
我还提醒您,请安全专家审核您的代码和加密技术的使用。