调用外部 Web API 时对路径'api/External'和方法'GET'执行多个操作



我正在尝试调用Web API应用程序中的外部托管Web API。在尝试使用Get()方法时,一切似乎都很正常。然而,当我尝试实现Get(int value)时,我遇到了一个错误:

具有路径"api/External"和方法"GET"的多个操作。

我的控制器出了什么问题?

public class ExternalController : ApiController
{
    static string _address = "http://localhost:00000/api/Values";
    private string result;
    // GET api/values
    public async Task<IEnumerable<string>> Get()
    {
        var result = await GetExternalResponse();
        return new string[] { result, "value2" };
    }
    private async Task<string> GetExternalResponse()
    {
        var client = new HttpClient();
        HttpResponseMessage response = await client.GetAsync(_address);
        response.EnsureSuccessStatusCode();
        var result = await response.Content.ReadAsStringAsync();
        return result;
    }
    public async Task<string> Get(int value)
    {
        var result = await GetExternalResponse();
        return result;
    }
}

我也尝试了以下方法,似乎也抛出了同样的错误:

private async Task<string> GetExternalResponse2(int value)
{
    var client = new HttpClient();
    HttpResponseMessage response = await client.GetAsync(_address + "/" + value);            
    response.EnsureSuccessStatusCode();
    var result = await response.Content.ReadAsStringAsync();
    return result;
}
public async Task<string> Get(int value)
{
    var result = await GetExternalResponse2(value);
    return result;
}

当你做这样的

获取api/External/{id}

由于web api配置中定义的默认路由,web api不确定是调用不带参数的Get Method还是调用带参数的GetMethod

我建议使用属性路由来解决问题

  [Route("api/External/Get")]
  public async Task<IEnumerable<string>> Get()
  [Route("api/External/Get/{id}")]
  public async Task<string> Get(int value) 

最新更新