我有一个应用程序,我希望允许用户输入自己网站的登录详细信息。其中一种身份验证方法是“表单”。我设想它的工作方式是用户进入方法&他们的登录表格的行动,以及每个凭证项目的名称/值,例如一个用于用户名,一个用于密码。然后,我的应用程序将发布此数据,以便模拟登录,获取返回的身份验证cookie,并能够像登录一样在其网站上工作。
原则上,这听起来像是一种合理的事情。但是,正如我相信你知道的那样,ASP.NET有很多输入,也有隐藏的输入,例如: __VIEWSTATE,每当提交ASP.NET表单时,它们都会全部发回服务器,例如当真实的用户登录时。但是当我的应用尝试登录时,它没有该页面上的完整输入列表及其值,例如总是在改变__VIEWSTATE。
我的问题:是否有办法将数据发布到ASPX页面,仅发布 某些输入,并排除其他输入,例如__VIEWSTATE?
如果页面是PHP,那么它可能看起来像这样:
实施例。 1:
...
<div id="header">
<form action="search.php" action="POST">
<div id="search">
<input type="text" name="query" id="SearchQueryText" value="Search query" />
<input type="button" name=submit" id="SearchSubmitButton" value="Search!" />
</div>
</form>
<form action="login.php" action="POST">
<input type="text" name="uname" id="Username" value="Username" />
<input type="text" name="passwd" id="Password" value="Password" />
<input type="button" name=submit" id="LoginSubmitButton" value="Login" />
</form>
...
</div>
...
但是,在ASP.NET Web窗体中,通过使用服务器控件,它可能看起来像:
实施例。 2:
...
<body>
<form name="AspNetForm" method="post" action="/Products/SomethingOrOther.aspx" id="Form" enctype="multipart/form-data">
<div id="header">
<div id="search">
<input type="text id="ctl00$SearchComponent$SearchBox" name="ctl00$SearchComponent$SearchBox" value="Search query" />
<input type="submit" id="ctl00$SearchComponent$SearchSubmit" name="ctl00$SearchComponent$SearchSubmit" value="Search!">
</div>
<div id="login">
<input type="text id="ctl00$LoginComponent$Username" name="ctl00$LoginComponent$Username" value="Username" />
<input type="text" id="ctl00$LoginComponent$Password" name="ctl00$LoginComponent$Password" value="Password">
<input type="submit" id="ctl00$LoginComponent$LoginSubmit" name="ctl00$LoginComponent$LoginSubmit" value="Login">
</div>
</div>
...
</form>
</body>
...
使用示例1,提交登录表单是将uname = something&amp; passwd = somethingelse POST到login.php的简单情况,但是,在ASP.NET中,因为所有输入都包含在“全局”{{1}中},要提交登录输入,您必须提交全局表单,因此必须提交所有输入。
所以我所追求的是一种仅以 方式提交该全局形式的某些输入的方法,例如:不是__VIEWSTATE,我们事先无法探测页面就无法知道。
答案 0 :(得分:2)
您可以使用AJAX将值回发到特定页面。通常,Web窗体旨在在您触发服务器端事件时回发页面上的所有数据。然后,您可以选择要在代码中使用的元素/值。如果您不想在元素上使用视图状态,则可以禁用它(例如EnableViewState = False)。
答案 1 :(得分:0)
您可以使用与asp经典相同的asp.net页面。
在html操作中,您可以放置aspx页面,然后您必须接受它。
然后你可以使用asp.net的请求对象来从表单中检索数据。同样,您可以在字符串中创建一个html表单,并将其放入面板控件中。
然后你可以将asp.net按钮作为提交按钮。