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 都很感兴趣.

埃里克·斯普尔

Asp.net相关问答推荐

SignalR + Autofac + OWIN:为什么 GlobalHost.ConnectionManager.GetHubContext 不起作用?

部署后 ASP.Net Core Identity 登录状态丢失

iOS 8 / Safari 8 不适用于 ASP.NET AJAX 扩展

如何在集线器类之外获取 SignalR 用户连接 ID?

Twitter bootstrap glyphicons 不会出现在发布模式 404 中

如何将 Web 应用程序项目转换为类库项目

使用 NancyFx 的好处?

带有邮箱地址参数的 WebApi 方法从 HttpClient 返回 404

哪些行为驱动开发 (BDD) 工具/框架可用于 Microsoft Stack?

如何在 IIS 7.5 上使用 ASP.NET 表单身份验证保护静态文件?

在asp.net控件之间动态添加

如何删除asp.net中的特定会话?

如何避免 ASP.NET MVC 中的 HttpRequestValidationException 呈现导致异常的相同视图

具有自定义报告创建能力的最佳 ASP.NET 报告引擎

Windows Azure PaaS(网络角色)的真正替代品?

MSBuild DeployOnBuild=true 不发布

协调 ASP.NET 脚本包和源映射

验证请求事件

StyleBundle 索引超出了数组的范围

ASP.Net 哪个用户帐户在 IIS 7 上运行 Web 服务?