ASP.NET Web Forms下能否本地测试VB.NET编写的IPN监听器代码
问题根因
你当前的核心错误是直接将form提交目标指向了ASP.NET后台源码文件IPNHandler.aspx.vb:
- IIS/ASP.NET运行环境默认会禁止直接访问
.vb/.cs这类后端源码文件,防止代码泄露,所以你请求.vb路径肯定返回404错误。 - 你修改为
IPNHandler.aspx后仍报错,属于路径配置或处理程序注册问题,按下面步骤排查即可。
调试修复步骤
- 第一步:修正测试页form的action属性,必须指向可执行的Web窗体入口,不要加
.vb后缀,优先用站点根路径避免相对路径错误,示例:
开头加<form target="_new" method="post" action="/PayPal/IPNHandler.aspx">/代表从站点根目录开始寻址,避免TestIPN.aspx不在根目录时相对路径拼接错误。 - 第二步:确认
IPNHandler.aspx的页面标记存在,且@Page指令和后台文件绑定正确,打开IPNHandler.aspx第一行应该类似:
检查<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="IPNHandler.aspx.vb" Inherits="你的项目命名空间.PayPal.IPNHandler" %>CodeBehind属性指向的文件名是否正确,Inherits的类名和命名空间是否和IPNHandler.aspx.vb里的类定义一致。 - 第三步:直接在浏览器地址栏输入
https://localhost:44390/PayPal/IPNHandler.aspx访问,看是否能正常返回(IPN处理逻辑不需要返回页面内容,但至少不能返回404),如果直接访问还是404:- 检查项目中
PayPal文件夹是否被配置为独立应用程序,如果是需要将IPNHandler部署到该应用程序目录下 - 确认站点的ASP.NET运行时版本配置正确,和你项目的编译版本一致
- 检查web.config中是否有禁止访问PayPal目录的权限配置规则
- 检查项目中
- 第四步:IPN处理逻辑验证:你需要在
IPNHandler.aspx.vb的Page_Load事件中编写POST参数接收和验证逻辑,不要依赖ASP.NET的页面生命周期事件,确保POST请求进来时能正常处理,示例代码:Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load If Request.HttpMethod = "POST" Then ' 接收所有POST参数,后续做校验逻辑 Dim postData As String = New StreamReader(Request.InputStream).ReadToEnd() ' 补充你的IPN业务处理代码 End If End Sub
内容的提问来源于stack exchange,提问作者haggis999
相关产品推荐
相关产品推荐

