难点:多个前后端交互 (#体会#:为什么要全栈学习?)
重点:前后端调用,略过CSS样式、JS SDK等内容
实现功能:
目标:沟通前后端,把原理吃透,将(ASP.NET 6.0)代码开源!
理解:消息在多方传递:
微信开放了一些“接口”:url,可以“按约定”传递参数,获取相应的信息(比如说:微信用户OpenId/二维码)。
#脑子始终保持清醒:#
所有的url都使用HTTP协议,所以需要额外的安全/身份/权限验证。
首先需要向wechat证明,这个服务器(17bang.ren)“是我的”。
问题:开发时的localhost不能被公网访问,也就无法被wechat访问。
为方便开发调试,需要利用网络地址转换(Network Address Translation)的内网穿透技术:让内网地址(的某个端口)能被外网访问。
下载 - 安装 - WebUI 修改 http隧道 (改端口号:和服务器配)
cpolar http 9200
通过浏览器进入配置界面:
注意本地地址里的端口号,要和VS运行对应。
最后,
[ApiController] [Route("[controller]")] public class WechatController : BaseController<WechatUser> { // GET: 向微信证明服务器权属 [HttpGet] [Route("Handler")] public string? Get([FromQuery] string? echostr) { return echostr;
另外一个需要验证的是向Wechat发起请求的“用户”身份:(你谁呀,有资格向我发起这个请求么?)
前面的接口配置解决了Wechat验证
解决向微信请求资源时“你是谁”的问题。
#小提示#:站在腾讯开发人员的角度思考问题,我access_token发给谁,怎么发,如何确保万无一失……?
最简单的办法:chrome
https://www.cnblogs.com/wonyun/p/CORS_preflight.html
理解/复习
将之前的localhost,改成任何域名都行
<bindings> <!--<binding protocol="http" bindingInformation="*:51137:localhost" />--> <binding protocol="http" bindingInformation="*:51137:*" /> </bindings>
以管理员身份,运行cmd(命令提示符)
netsh http show urlacl
网址
netsh http add urlacl url=http://*:51137/ user=everyone
netsh http delete urlacl url=http://*:51137/
添加/删除防火墙规则:
netsh advfirewall firewall add rule name="IISExpressWeb" dir=in protocol=tcp localport=51137 action=allow netsh advfirewall firewall delete rule name="IISExpressWeb"
账号
(HOST白名单)
不要用Model绑定
public async void Post([FromBody] string? message) public async void Post([FromBody]WeChatMessage? message)
不要因为传送的是xml文本就:
[Consumes("application/xml")]
我们的 特色:
更多了解 加