0

好的,我正在与第三方 Web API 合作,该 API 使用 Web 挂钩在“发生某事”时进行通信。当他们“发生某事”时,他们会向我的回调 URL 发送一个 POST 请求。

我的问题是,一旦我抓住了那个 POST,如何从中提取参数?

我正在尝试构建一个集成测试场景,在其中调用我自己的回调 URL 并附加参数,这样我就不必经历“我怎样才能让他们的回调击中我的开发机器”例程!

这是我试图模拟的方式,但不确定这是对我的回调 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}&param2={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,但我找不到参数在请求对象上的位置。

注意:我构建请求的方式与构建它以调用 API 的方式相同,但不能 100% 确定这是正确的。

4

2 回答 2

2

只需使用默认模型绑定器来解析参数并将它们作为查询字符串参数传递:

[HttpPost]
public ActionResult CallbackAction(string param1, string param2)
{
    ...
}

或者如果您有很多使用包含它们作为属性的视图模型:

[HttpPost]
public ActionResult CallbackAction(MyViewModel model)
{
    ...
}

参数的名称必须与 POST 请求正文中发送的名称相匹配(根据您的示例param1param2)。

于 2012-07-20T05:47:51.603 回答
0

通过一点挖掘(睡眠后),我在这里找到了我的问题的答案:如何使用 HttpWebRequest 将数据发布到 MVC 控制器?

显然问题是我如何构建请求。

抱歉,如果有人在回答上浪费了太多时间。

谢谢

于 2012-07-20T13:38:40.103 回答