如何将表单从HTML页面发布到ASPX页面(2.0)并能够读取值?
我目前有一个使用成员资格提供程序的ASP.NET站点,一切正常。 用户可以从Login.aspx页面登录。
我们现在希望能够让用户直接从另一个网站登录 - 这基本上是一个静态HTML页面。 用户需要能够在此HTML页面上输入他们的名称和密码,并将其POST到我的Login.aspx页面(我可以在其中手动登录)。
是否可以将表单值从HTML传递到ASPX? 我已经尝试了一切,Request.Form.Keys集合总是空的。 我不能使用HTTP GET,因为这些是凭据,不能在查询字符串上传递。
我所知道的唯一方法是iframe。
这不是Jeff在他关于CSRF和XSRF攻击的文章中所警告的那种事情吗?http://www.codinghorror.com/blog/archives/001175.html
我很惊讶没有人提到这一点,但是http POST并不比GET更安全。 我建议不要这样传递凭据。 这里有很多想法和信息:stackoverflow.com/questions/1008668/how-secure-is-a-http-post
这很有可能。我嘲笑了3页,应该给你一个概念证明:
.aspx页面:
代码背后:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
For Each s As String In Request.Form.AllKeys
Response.Write(s &":" & Request.Form(s) &"
")
Next
End Sub
单独的HTML页面:
......并按预期反刍形式值。如果这不起作用,正如其他人所建议的那样,使用流量分析工具(fiddler,ethereal),因为某些东西可能不会出现在你期望的地方。
这在我的ASP.NET 4中不起作用,从搜索它似乎可能与Viewstate有关。 我试图禁用它,但没有运气,登录仍然没有发生。
如果您的html输入都没有NAME,则Request.Form.Keys集合将为空。在你做了一段时间的.NET之后,很容易忘记将它们放在那里。只需命名它们就可以了。
我花了很多年才意识到这一点。 当您在.Net中执行此操作时,asp.net引擎会自动添加名称atttribute。 如果您"手动"创建html表单,很容易忘记它,然后没有任何内容发布,你想知道为什么。
是的,我正在设置Id,但忘了设置名称:S
您确定您的HTML表单是否正确,并且实际上是否进行了HTTP POST?我建议运行Fiddler2,然后尝试通过您的Login.aspx,然后远程HTML站点登录,然后比较发送到服务器的请求。对我来说,ASP.Net总是工作正常 - 如果HTTP请求包含有效的POST,我可以使用Request.Form获取值...
在html表单中,您需要提供额外的viewstate变量并在服务器页面中禁用ViewState。
但这需要对双方进行一些控制。
表单HTML:
注意空__VIEWSTATE。
WebForm.aspx:
CodeBehind="WebForm.aspx.cs" Inherits="WebForm"
EnableEventValidation="False" EnableViewState="false" %>
注意EnableEventValidation="False", EnableViewState="false"以防止空视图状态的验证错误。
Code Behind / Inherits值不准确。
WebForm.cs:
public partial class WebForm : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string value = Encoding.Unicode.GetString(Convert.FromBase64String(this.postData.Text));
}
}
你确定可以。创建一个HTML页面,其中包含login.aspx页面中的必要组件(即用户名等),并确保它们具有相同的ID。为了你的行动,请确保它是一个帖子。
您可能必须在Page_Load函数的login.aspx页面上执行一些代码来读取表单(在Request.Form对象中)并调用相应的函数来记录用户,但除此之外,您应该有权访问形式,并可以做你想要的。
你确定可以。
了解如何执行此操作的最简单方法是浏览到要发布到的aspx页面。然后将该页面的源保存为HTML。更改新html页面上表单的操作,以指回您最初复制它的aspx页面。
将值标记添加到表单字段并将所需数据放在那里,然后打开页面并单击"提交"按钮。
删除数据发布/发布.aspx页面的runat ="server"部分。
希望这会有所帮助 -
把这个标签放在html和
删除你的login.aspx设计内容..只写页面指令
并且您将在提交按钮单击后获取aspx页面中的值
像这样-
protected void Page_Load(object sender,EventArgs e)
{
if (!IsPostBack)
{
CompleteRegistration();
}
}
public void CompleteRegistration()
{
NameValueCollection nv = Request.Form;
if (nv.Count != 0)
{
string strname = nv["txtbox1"];
string strPwd = nv["txtbox2"];
}
}