问题

ASP.NET serverside控件回到自己的页面.这使得您想将用户重定向到外部页面的情况发生,但由于某种原因(例如为了身份验证)需要将其发布到该页面.

如果您不想重定向,HttpWebRequest可以很好地工作,而JavaScript在某些情况下很好,但如果您真的需要serverside代码来获取帖子的数据,可以变得棘手.

那么如何发布到外部URL并将用户重定向到ASP.NET代码后面的结果?

  最佳答案

这就是我今天解决这个问题的方法.我从C#Corner上的this article 开始,但发现了这个例子 – 虽然技术上说明了 – 一点不完整.他说的一切都是正确的,但我需要击中几个外部网站来整合这个以完全按我想要的工作.

用户根本没有在技术上提交表单,他们点击一个链接到我们的支持中心,而是将它们记录在一个http帖子中,必须做到支持中心的网站。

这个解决方案涉及使用HttpContext.Current.Response.Write()为表单编写数据,然后在<body onload="">方法上使用一点Javascript将表单提交给正确的URL.

当用户点击支持中心链接时,调用以下方法来编写响应并重定向用户:

 public static void PassthroughAuthentication()
{

    System.Web.HttpContext.Current.Response.Write("<body 
    onload=document.forms[0].submit();window.location=\"Home.aspx\";>");

    System.Web.HttpContext.Current.Response.Write("<form name=\"Form\" 
    target=_blank method=post 
    action=\"https://external-url.com/security.asp\">");

    System.Web.HttpContext.Current.Response.Write(string.Format("<input 
       type=hidden name=\"cFName\" value=\"{0}\">", "Username"));

    System.Web.HttpContext.Current.Response.Write("</form>");
    System.Web.HttpContext.Current.Response.Write("</body>");
}
 

这种方法的关键在于加载Javascript的位置,当页面的主体加载时,提交表单,然后将用户重定向回我自己的主页.这一点的原因是我在新窗口中启动外部网站,但如果用户刷新页面,则不希望用户重新提交隐藏表单.此外,隐藏表单将页面推送到几个像素上,这些像素使我感到紧张.

我对任何更清洁的想法都非常感兴趣.

Eric Sipple

  相同标签的其他问题

javascriptc#asp.netformspostback
上一个问题: