ارسال پارامتر بصورت post و redirectکردن به سایت دیگر در MVC Core
آخرین بروز رسانی: 1400/04/21
بعضی وقتها پیش میاد که میخای یکسری پارامتر بفرستی به یه سایت دیگه بصورت post . ولی نمیخای پارامترها رو بصورت hidden یا هر چیز دیگه ای تو صفحه html قرار بدی که کابربران نتونن با inspect گرفتن ببینن. ( مثال بارزش برای ارسال پارامترها به درگاه پرداخت بانکهاست )
خوب راهش اینه که این کار رو بصورت سرورساید انجام بدی.
پس تو صفحه html خودت یه فرم ساده مثل کد زیر مینویسی
<form action="/RedirectAndPostData" method="post">
<input type="hidden" name="id" value="55" />
<button type="submit">پرداخت</button>
</form>
و تو Controller کد زیر رو اضافه میکنی و تمام
public async Task RedirectAndPostData(int id)
{
var modelToPost =await FetchYourModelFromDbORMake(id);
var basnkUrl = "https://bankToPay.com";
HttpResponse response = HttpContext.Response;
response.Clear();
StringBuilder s = new StringBuilder();
s.Append("<html>");
s.AppendFormat("<body onload='document.forms[\"form\"].submit()'>");
s.AppendFormat("<form name='form' action='{0}' method='post'>", basnkUrl);
s.AppendFormat("<input type='hidden' name='{0}' value='{1}' />", "Amount", modelToPost.Amount);
s.AppendFormat("<input type='hidden' name='{0}' value='{1}' />", "TerminalId", "TerminalId--");
s.AppendFormat("<input type='hidden' name='{0}' value='{1}' />", "ResNum", modelToPost.Id);
s.AppendFormat("<input type='hidden' name='{0}' value='{1}' />", "RedirectURL", "http://localhost:19179/invoice/BankResult");
s.AppendFormat("<input type='hidden' name='{0}' value='{1}' />", "CellNumber", modelToPost.CellPhone);
s.Append("</form></body></html>");
await response.WriteAsync(s.ToString());
}
همانطور که میبینی کلی پارامتر post میکنی به سرور (مثلن بانک) بدون اینکه تو فرم چیزی دیده بشه بجز یه id (که حتی اونم میشه براش راه حل داد . اینجا فرض شده اون و کاربران با inspect ببین هم مهم نیست)