路由找不到我的网站 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]
.
我正在尝试调用我的网站 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]
.