我正在尝试调用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)