我正在编写处理Facebook回调的代码。 Facebook使用POST调用相同的Url但具有不同的对象类型。我还没准备好处理所有参数类型,所以我尝试了以下内容:
public void Post([FromBody]class1 webhook1)
{ // for object1
}
public void Post([FromBody]class2 webhook2)
{ // for object12
}
public async Task Post()
{
string rawData = await Request.Content.ReadAsStringAsync();
log(rawData);
}
但是,我得到了这个例外:
"Multiple actions were found that match the request ...
有没有办法允许我还没准备好处理参数类型的回退选项?
答案 0 :(得分:0)
" web"不支持基于参数类型的方法重载路由方法
使用路线属性:
[Route("webhook1")]
public void Post([FromBody]class1 webhook1) {}
[Route("webhook2")]
public void Post([FromBody]class2 webhook2) {}
或者,如果您不希望客户端知道不同参数的类型,
然后制作一个" web"从请求主体读取原始数据的方法,
检测一种数据并调用相应的方法来处理它
答案 1 :(得分:0)
您可能希望使用attribute based routing,因为这会为您提供更多灵活性。 Web api donot支持标准的路由方法。 它应该是这样的:
[RoutePrefix("api/example")]
public ExampleController : ApiController{
[Route("postwebhook1")]
public void Post([FromBody]class1 webhook1)
{ // for object1
}
[Route("postwebhook2")]
public void Post([FromBody]class2 webhook2)
{ // for object12
}
[Route("post")]
public async Task Post()
{
string rawData = await Request.Content.ReadAsStringAsync();
log(rawData);
}
}