路由找不到我的网站 api

Routing not finding my web api

我正在尝试调用我的网站 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

我得到的错误是 'not found'?

您的网站 api 必须在 WebApiConfig.cs 文件中包含以下内容:

      config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}/{CompanyRef}",
            defaults: new { CompanyRef= RouteParameter.Optional }
        );

从您得到的分支来看,您在分支中没有输入参数作为可选参数。我将正常值从 id 更改为 CompanyRef,但我认为 id 也可能有效。

在OP的代码和问题上,接受的答案实际上是完全错误的。那是 ASP.net WEB API v1.x 进行路由的方式,OP 在他的评论中是正确的,使用属性时它是无用的。

[Web 的 v2+ API 需要] 为了使属性起作用并注册路由,您需要在 WebApiConfig.cs Route(config) 方法中添加以下代码:

config.MapHttpAttributeRoutes();

这将解析您所有的 [RoutePrefix("..")][Route("..")] 并创建您的 API 的路由。最佳做法是使用 [RoutePrefix("..")] 定义 API 的一般路径以到达您的控制器,然后使用 [Route("..")] 和 http 动词属性映射您的不同方法,例如 [HttpGet].