所以我可以执行以下POST
提交
@Html.BeginForm(null, null, FormMethod.Post, new { @action = "https://externalsite.com/secretroom" })
{
<input id="SECRETCODE" name="SECRETCODE" type="hidden" value="GABEN" />
<input type="submit" value="submit"/>
}
提交后,我会转到https://externalsite.com/secretroom
。但正如您所看到的,SECRETCODE
已在用户HTML页面中曝光,而我并不想要这样。
所以我要做的就是尝试在我的服务器端进行POST。
public ActionResult Test()
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("https://externalsite.com/secretroom");
var content = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("SECRETCODE", "GABEN")
});
var result = await client.PostAsync("", content).Result;
if(result.IsSuccessStatusCode)
{
return Redirect("https://externalsite.com/secretroom");
}
}
}
问题是我无法重定向用户,因为externalsite
会拒绝用户,我不知道/无法控制secretroom
验证在externalsite
上的工作方式。如果我按照上面的方式进行操作,它将只允许访问。
话虽如此,这实际上是可能的吗?
答案 0 :(得分:1)
编辑:在更准确地了解您要完成的内容之后,我不相信您可以做到这一点。特别是因为在您的第一个示例中,您实际上是向用户浏览器发送响应,该响应将它们重定向到目标站点并发送该表单参数。然而,以编程方式POST数据是浏览器的带外。这两种方法不可互换。如果您不满意以这种方式发送敏感数据,则您很可能需要与网站提供商合作以确定替代方法。
原始解决方案
您可以使用WebRequest类以编程方式POST数据。
WebRequest request = WebRequest.Create("https://externalsite.com/secretroom");
request.Method = "POST";
... rest omitted - refer to link below for specifics ...
https://msdn.microsoft.com/en-us/library/debx8sh9%28v=vs.110%29.aspx
此外,您可能需要参考以下SO问题,以获取有关WebRequest类变体的详细信息,例如HttpWebRequest,FtpWebRequest等。