好的,我正在使用第三方Web API,当他们的“发生了什么事”时,它使用Web钩子进行通信。当他们的“发生了什么事”时,他们会向我的回调网址发送一个POST请求。
我的问题是,一旦我抓到POST,如何从中提取参数?
我正在尝试构建一个集成测试场景,我在其中调用我自己的附加参数的回调URL,这样我就不必经历“我怎样才能让他们的回调能够点击我的开发机器”例程!
以下是我尝试模拟的方法,但不确定这是对我的回调网址调用的真实表示:
[Test]
public void {
const string localCallbackUrl = "http://localhost/callback/callbackaction";
HttpWebRequest request = WebRequest.Create(localCallbackUrl) as HttpWebRequest;
request.Method = "POST";
request.ContentType = "application/x-www.form-urlencoded";
request.Accept = "application/json";
string parameters = string.Format("param1={0}¶m2={1}, "foo", "bar");
byte[] byteArray = Encoding.UTF8.GetBytes(parameters);
request.ContentLength = byteArray.Length;
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
var response = request.GetResponse();
}
对“GetResponse()”的调用正在点击我的回调URL,但我无法在Request对象上找到参数的位置。
注意:我正在构建请求的方式与构建它以调用API的方式相同,但不是100%确定是正确的。
答案 0 :(得分:2)
只需使用默认模型绑定器来解析参数并将它们作为查询字符串参数传递:
[HttpPost]
public ActionResult CallbackAction(string param1, string param2)
{
...
}
或者如果您有许多人使用包含它们作为属性的视图模型:
[HttpPost]
public ActionResult CallbackAction(MyViewModel model)
{
...
}
参数的名称必须与POST请求正文中发送的参数名称相匹配(根据您的示例param1
和param2
)。
答案 1 :(得分:0)
稍作挖掘(睡眠后),我在这里找到了问题的答案:How do I post data to MVC Controller using HttpWebRequest?
显然问题在于我是如何构建请求的。
很抱歉,如果有人浪费太多时间回答。
谢谢