嗨我有一个API Controller
,其中有一个接收参数的方法。
当我从client
拨打电话时,请404 error
。
如果使用ni参数重写de方法,它可以工作......
这是我的API controller
public class ClientController : ApiController
{
[HttpGet]
public List<User> GetAAA(int userCode)
{
return null;
}
}
这是我的客户......
using (HttpClient client = new HttpClient())
{
client.BaseAddress = new Uri(apiUrl);
client.DefaultRequestHeaders.Accept.Clear();
List<User> list;
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
string uriString = string.Format("{0}/{1}", "http://localhost:7734/api/Client/GetAAA", 1783);
HttpResponseMessage response = await client.GetAsync(uriString);
if (response.IsSuccessStatusCode)
list = response.Content.ReadAsAsync<List<User>>().Result;
else
throw new Exception("Error");
}
即使我在导航器中写http://localhost:7734/api/Client/GetAAA/1783
说“找不到页面”
我的WebApiConfig
就像这样
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
我缺少什么?
由于
答案 0 :(得分:1)
更新控制器操作以使Route属性如下
public class ClientController : ApiController
{
[Route("api/Client/GeAAA/{userCode}")]
[HttpGet]
public List<User> GetAAA(int userCode)
{
return null;
}
}
答案 1 :(得分:1)
更改控制器方法:
[HttpGet]
public List<User> GetAAA(int id)
{
return null;
}
或使用网址:
答案 2 :(得分:0)
看起来这是基于约定的路由与属性路由的情况。
ASP.NET MVC将使用基于约定的路由,如配置文件中所述。
因此,“GET”将从url参数中删除。
看起来应该是这样的:
http://localhost:7734/api/Client/AAA/1783
我个人发现基于约定的路由不太有用,所以我使用基于属性的路由(也在配置文件中配置)。
将此添加到您的GetAAA方法:
[HttpGet]
[Route("GetAAA/{userCode}")]
public List<User> GetAAA(int userCode)
{
...
}
此Route属性应该允许您按照您的说明使用链接。
答案 3 :(得分:0)
这是我的错。这么傻我以前没见过。
我的想法是不使用[Route]
,只使用WebApiConfig
定义是
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
我在电话中唯一需要做的事情
public List GetAAA(int userCode)
替换参数名称....
公开列表GetAAA(int id)
id
是如何在配置中定义的......