ASP.NET服务器端控件回发到自己的页面.这使得您希望将用户重定向到外部页面,但由于某种原因(例如,为了身份验证)需要发布到该页面的情况变得很痛苦.
如果你不想重定向,HttpWebRequest
就很好用,JavaScript在某些情况下也可以,但如果你真的需要服务器端代码来为帖子收集数据,就可能会变得很棘手.
那么,如何同时发布到外部URL并将用户重定向到ASP.NET代码隐藏代码的结果呢?
ASP.NET服务器端控件回发到自己的页面.这使得您希望将用户重定向到外部页面,但由于某种原因(例如,为了身份验证)需要发布到该页面的情况变得很痛苦.
如果你不想重定向,HttpWebRequest
就很好用,JavaScript在某些情况下也可以,但如果你真的需要服务器端代码来为帖子收集数据,就可能会变得很棘手.
那么,如何同时发布到外部URL并将用户重定向到ASP.NET代码隐藏代码的结果呢?
下面是我今天解决这个问题的方法.我从C#Corner的this article开始,但发现这个例子——虽然从技术上来说——有点不完整.他说的一切都是对的,但我需要访问一些外部网站,将其整合在一起,才能完全按照我的意愿工作.
从技术上讲,用户根本没有提交表单,这一点也没有帮助;他们点击一个链接进入我们的支持中心,但要让他们登录到支持中心的网站上,必须发送一条http帖子.
这个解决方案包括使用HttpContext.Current.Response.Write()
为表单编写数据,然后在<body onload="">
方法上使用一点Javascript将表单提交到正确的URL.
当用户单击Support Center链接时,将调用以下方法来写入响应并重定向用户:
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的onload位,它在页面主体加载时提交表单,然后将用户重定向回我自己的主页.这有点胡说八道的原因是我要在一个新窗口中启动外部站点,但不希望用户在刷新页面时重新提交隐藏的表单.另外,隐藏的表单将页面推低了几个像素,这让我很紧张.
我对任何人在这件事上有更干净的 idea 都很感兴趣.
埃里克·斯普尔