gpt4 book ai didi

c# - 在查询字符串中没有 __VIEWSTATE 变量的情况下将表单数据发布到另一个页面

转载 作者:太空宇宙 更新时间:2023-11-03 13:18:05 24 4
gpt4 key购买 nike

目前,我正在将支付网关与我的 ASP.NET 应用程序集成,其中我必须使用 GET 方法将几个表单变量发布到支付网关页面。当我使用简单的 HTML 页面使用表单控件保存值并将其发布到外部支付网关页面时,一切正常。

当我尝试从我的 ASP.NET c# 应用程序内部执行此操作时,出现错误“Viewstate MAC 验证失败。如果此应用程序由网络场或集群托管,请确保配置指定相同的 validationKey和验证算法。AutoGenerate 不能在集群中使用。”。在检查从我的 asp.net c# 页面发布到外部支付网关页面的查询字符串时,有一个额外的 __VIEWSTATE 变量附加到我想要的查询字符串,它包含我想发布到支付网关页面的变量值。

我已将 EnableViewState="false"EnableEventValidation="false"EnableViewStateMac="false"添加到 ASPX 页面中的 <%Page%> 指令,并在代码隐藏的覆盖 onLoad 方法中添加了“this.EnableViewState = false”。

添加以下代码片段供您引用:

ASPX 页面

<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 就不会为您生成 View 状态或其他隐藏字段,您可以跨主机提交表单。

我还提醒您让安全专家审核您的代码和您对密码学的使用。

关于c# - 在查询字符串中没有 __VIEWSTATE 变量的情况下将表单数据发布到另一个页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25361803/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com