我正在尝试拨打我的网络API。
这是api控制器:
public class CustomerController : ApiController
{
[HttpGet]
[Route("Customer/Get/{CompanyRef}")]
public IEnumerable<Services.Customer> Get(Guid CompanyRef)
{
return customerRepository.Get(CompanyRef);
}
}
这是我的客户端(c#desktop)
using (HttpClient httpClient = new HttpClient())
{
Uri uri = new Uri("myuri");
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = await httpClient.GetAsync(uri + route + "?CompanyRef=" + new Guid());
response.EnsureSuccessStatusCode();
}
uri电话转换为:
http://myuri/api/Customer/Get?CompanyRef=00000000-0000-0000-0000-000000000000
我得到的错误是'找不到'?
答案 0 :(得分:1)
您的网络API必须在您的WebApiConfig.cs文件中包含以下内容:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{CompanyRef}",
defaults: new { CompanyRef= RouteParameter.Optional }
);
从分支中可以看出,您没有将分支中的输入参数作为可选参数。我将正常值从id更改为CompanyRef,但我认为id可能也会起作用。
答案 1 :(得分:1)
对于OP的代码和问题,接受的答案实际上是完全错误的。那就是ASP.net WEB API v1.x做路由的方式和OP在他的评论中是正确的,它在使用属性时没用。
[需要Web API的v2 +] 要使属性和要注册的路由,您需要在WebApiConfig.cs Route(config)方法中添加以下代码:
config.MapHttpAttributeRoutes();
这将解析您的所有[RoutePrefix("..")]
和[Route("..")]
,并创建您的API路由。最佳做法是使用[RoutePrefix("..")]
来定义API的一般路径,以便与您的控制器和然后使用[Route("..")]
&amp; http动词属性,例如[HttpGet]
。