JeffreySu / WeiXinMPSDK

微信全平台 .NET SDK, Senparc.Weixin for C#,支持 .NET Framework 及 .NET Core、.NET 8.0。已支持微信公众号、小程序、小游戏、微信支付、企业微信/企业号、开放平台、JSSDK、微信周边等全平台。 WeChat SDK for C#.
https://weixin.senparc.com
Apache License 2.0
8.43k stars 4.35k forks source link

Asp.Net Core 中,支付回调时,ResponseHandler的构造函数,读取Form异常。 #283 #434

Closed edtim8 closed 7 years ago

edtim8 commented 7 years ago

在 Senparc.Weixin.MP 14.3.127 中还是存在 #283 的问题。。。。

怎么解决?

image

JeffreySu commented 7 years ago

是的,.net core在最近的版本中没有更新,接下去会有陆续更新。如果您有已经修改好的代码也欢迎Pull Request过来。

JeffreySu commented 7 years ago

这个地方确实有问题 @lishewen

lishewen commented 7 years ago

最新版还存在?

JeffreySu commented 7 years ago

还是要继续处理一下,模拟消息的暂时已经解决了。

lishewen commented 7 years ago

这个 Issue 是说头是 text/xml ,就在ReadForm时报异常,而根据 #283 的判断修改(Request.HasFormContentType),不是 application/x-www-form-urlencoded 头的根本不会去ReadForm,所以就想确认一下最新版还是否存在此问题,如果存在就要再跟踪下代码的处理

JeffreySu commented 7 years ago

@lishewen 后来你推送的有处理这个问题吗?

lishewen commented 7 years ago

没有,这个问题上需要更多的信息 但这块最近我们发现了一个问题: 在 PayNotifyUrl 里面使用 ResponseHandler resHandler = new ResponseHandler(HttpContext); 这样是不会出问题 但使用 ResponseHandler resHandler = new ResponseHandler(null); 就会出错 我当时翻译netcore代码时使用 DefaultHttpContext 取代 HttpContext.Current,貌似现在拿不到需要的httpcontext信息 一直以来我们团队都没有在使用null参数,所以没发现问题,但如果按net45的sample那样写 PayNotifyUrl 目前就会取不到回调的信息

lishewen commented 7 years ago

要完整实现 HttpContext.Current 的话,需要实现一个中间件 参考:https://stackoverflow.com/questions/38571032/how-to-get-httpcontext-current-in-asp-net-core 我不确定,在现有 Senparc.Weixin.MP 架构下注入中间件是否合适,还是说把 netcore 这块构造函数的 null 参数屏蔽掉