如何处理也具有未知类型参数的POST方法?

时间:2016-06-04 05:08:22

标签: asp.net-mvc asp.net-web-api

我正在编写处理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 ...

有没有办法允许我还没准备好处理参数类型的回退选项?

2 个答案:

答案 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);
 }
}