路由找不到我的网络API

时间:2015-11-09 18:06:01

标签: c# httpclient asp.net-web-api2 asp.net-web-api-routing

我正在尝试拨打我的网络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

我得到的错误是'找不到'?

2 个答案:

答案 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]