【问题标题】:Call aspx event handler with http request使用 http 请求调用 aspx 事件处理程序
【发布时间】:2021-05-03 11:29:19
【问题描述】:

考虑一下 aspx 页面后面的以下代码:

protected void onBtnClick(object sender, EventArgs e)
{
}

是否可以创建/制作POST 请求 (HTTPWebRequest/HttpClient) 来调用 aspx 页面后面的事件处理程序?

谢谢

【问题讨论】:

  • 不是直接的——你需要某种网络服务前端,例如ASP.NET MVC 或旧旧 .asmx 或 WCF 服务上的 Web 服务方法。 ASP.NET Webforms (.aspx) 实际上没有任何可以从外部调用的能力
  • 这是不可能的,因为该事件处理程序需要/期望的是有关单击按钮的页面状态的大量上下文。没有指向该方法的直接 URL。这一切都与 asp.net webforms 的页面生命周期有关(这是一个讨厌的、复杂的野兽,总是不适合它被硬塞进的 web 应用程序环境(从桌面 winforms 复制)。正如 marc_s 所说,你需要一个单独的 web某种服务。ASP.NET 在这方面提供了完整的选择菜单。

标签: c# asp.net web-services webforms


【解决方案1】:

出于好奇,我能够让它工作,但它需要对您可能不想做(或不能做)的 .aspx 页面进行特定更改:<%@ Page EnableEventValidation="false" 还必须将您的 ClientIDMode 设置为静态

鉴于此Test.aspx 网络表单标记:

<form id="form1" runat="server">
    <asp:Button runat="server" OnClick="OnClick" Text="Click Me" ClientIDMode="Static" ID="Button1" />
</form>

还有这个代码隐藏:

protected void OnClick(object sender, EventArgs e)
{
    Response.Write("clicked");
}

我能够从任意 html 页面(同一站点)发布到 Test.aspx 并让 OnClick 着火,同时将 Page.IsPostBack 设置为 true

<form method="post" action="Test.aspx">
    <input type="hidden" name="Button1" value="Click+Me" />
    <input type="hidden" name="__VIEWSTATEGENERATOR" value="" />
    <input type="hidden" name="__VIEWSTATE" value="" />
    <input type="submit" value="submit" />
</form>

同样,不推荐这样做,可能会打开 Test.aspx 到各种讨厌的 hack。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多