You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ASP.NET Web Forms中配置路由接收带/pix的Webhook POST请求

解决方案

针对你的需求,有三种可行的配置方式,你可以根据实际场景选择:

方式一:复用现有路由,扩展方法参数

你的默认路由已经包含可选的{id}参数,/pix部分正好对应这个参数。只需修改控制器方法,添加id参数即可:

<System.Web.Http.HttpPost>
Public Sub WebHook(ByVal request As HttpRequestMessage, Optional ByVal id As String = Nothing)
    Dim json = request.Content.ReadAsStringAsync().Result
    
    ' 根据id判断是否为pix请求
    If id = "pix" Then
        ' 处理第三方pix WebHook逻辑
    Else
        ' 原有WebHook逻辑
    End If
    ...
End Sub

这样请求https://example.com/api/NotesApi/WebHook/pix时,id参数会被自动赋值为"pix",原有https://example.com/api/NotesApi/WebHook的请求也能正常触发,此时id为Nothing。

方式二:添加专属路由规则

如果想让/pix的路由更明确,可以在Global.asax的路由配置中,添加一条优先于默认路由的专属规则:

' 先添加专属路由
RouteTable.Routes.MapHttpRoute(
    name:="WebHookPixRoute",
    routeTemplate:="api/{controller}/WebHook/pix",
    defaults:=New With {Key .action = "WebHookPix"}
)

' 再保留原有默认路由
RouteTable.Routes.MapHttpRoute(
    name:="DefaultApi",
    routeTemplate:="api/{controller}/{action}/{id}",
    defaults:=New With {Key .id = System.Web.Http.RouteParameter.[Optional]}
)

然后在NotesApiController.vb中新增对应方法:

<System.Web.Http.HttpPost>
Public Sub WebHookPix(ByVal request As HttpRequestMessage)
    Dim json = request.Content.ReadAsStringAsync().Result
    ' 处理第三方pix WebHook逻辑
    ...
End Sub

这种方式下,/WebHook/pix的请求会直接触发WebHookPix方法,和原有WebHook方法完全分离。

方式三:使用特性路由(更灵活)

.NET 4.6.1的Web API支持特性路由,先在Global.asax中启用特性路由:

' 先启用特性路由
System.Web.Http.GlobalConfiguration.Configuration.MapHttpAttributeRoutes()

' 再注册默认路由
RouteTable.Routes.MapHttpRoute(
    name:="DefaultApi",
    routeTemplate:="api/{controller}/{action}/{id}",
    defaults:=New With {Key .id = System.Web.Http.RouteParameter.[Optional]}
)

然后在控制器方法上直接指定路由:

方式3.1:为pix请求单独配置路由

<System.Web.Http.Route("api/NotesApi/WebHook/pix")>
<System.Web.Http.HttpPost>
Public Sub WebHookPix(ByVal request As HttpRequestMessage)
    Dim json = request.Content.ReadAsStringAsync().Result
    ' 处理pix请求逻辑
    ...
End Sub

方式3.2:通用路由匹配多种类型

如果未来可能有其他类似/pix的子路径,可以用占位符参数:

<System.Web.Http.Route("api/NotesApi/WebHook/{webHookType}")>
<System.Web.Http.HttpPost>
Public Sub WebHook(ByVal request As HttpRequestMessage, ByVal webHookType As String)
    Dim json = request.Content.ReadAsStringAsync().Result
    
    Select Case webHookType
        Case "pix"
            ' 处理pix逻辑
        Case ' 其他类型
            ' 对应处理
    End Select
    ...
End Sub

内容的提问来源于stack exchange,提问作者Premy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 19:03:36