我正在尝试创建一个 Node 代理,它从 Web 应用程序获取请求并将它们发送到 c# 4.6 中的旧 asp.net mvc 应用程序。
我正在使用 npm 包 http-proxy。我对它的了解非常深入,并且非常清楚它在做什么。我可以看到即将发送的请求,并且如果应用程序收到请求,我可以调试 C# 应用程序。
如果我的请求以 content-type = text 的形式通过,则 mvc 应用程序会收到该请求,但在操作中有效负载为 null。即,输入视图模型中没有可用负载中发送的任何值。
如果我的请求是
content-type = application/json
(这是asp.net mvc应用程序前端发送的),那么mvc操作断点永远不会被命中并且请求挂起。
我可以在开发工具中看到原始前端正在发送的内容,并且我可以在节点应用程序中控制台登录它将要发送的内容。当我在节点中查看请求时,只有大量信息,开发工具中显示的似乎只是请求标头和有效负载。我比较了两者之间的差异,发现有一些细微的差别(主机、来源、引用者,也许还有其他一些小东西,我将在下面发布标题)。
最后我可以成功地卷曲端点并从 mvc 接收成功消息,如下所示
curl -H "Content-Type: application/json" -X POST -d '{"userName":"asdf", "password":"asdf"}' http://mydomain/login/login
这是来自 mvc 前端请求的标头
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Connection: keep-alive
Content-Length: 252
Content-Type: application/json; charset=UTF-8
Host: example.net
Origin: http://example.net
Referer: http://example.net/
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36
X-Requested-With: XMLHttpRequest
这些来自我的新前端
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Connection: keep-alive
Content-Length: 15
Content-Type: text/plain;charset=UTF-8
Host: localhost:3002
Origin: http://localhost:3001
Referer: http://localhost:3001/
sec-ch-ua: "Google Chrome";v="105", "Not)A;Brand";v="8", "Chromium";v="105"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Linux"
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-site
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36
这些来自我的代理,即将提交到 mvc 应用程序
{
accept: '*/*',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'en-US,en;q=0.9'
connection: 'keep-alive',
'content-length': '15',
'content-type': 'text/plain;charset=UTF-8',
host: 'localhost:3002',
origin: 'http://localhost:3001',
referer: 'http://localhost:3001/',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Linux"',
'sec-ch-ua': '"Google Chrome";v="105", "Not)A;Brand";v="8", "Chromium";v="105"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-site',
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36',
}
当我在请求上放置“数据”监听器时,我确实看到有效负载消失。显然还有很多请求,我只是不知道什么是相关的,什么是不相关的。我会说 URL 是相同的:)。
所以我正在回答我自己的问题,实际上 irc 上有 geirha 的人帮助了我。
我在中间件中有 koa-bodyparser (出于某种原因),虽然我不明白为什么,但当我将其与设置 content-type="application/json" 结合使用时,请求只是挂在了 asp.net 上mvc 服务器。因此,在没有 bodyparser 和内容类型的情况下,它确实有效。
我发誓你尝试了所有这些排列,以为你已经尝试了所有这些排列,但总有一种会溜走,而最终就是你需要的。