我有3个WEB API,其中2个正在运行。第三个没有工作,虽然它与其他的相似。
我的控制器:
public class LNAXController : ApiController
{
[HttpGet]
public IEnumerable<State> States()
{
using (ApplicationDbContext db = new ApplicationDbContext())
{
return db.States.Where(s => s.Country.Code == "USA").OrderBy(o => o.Name).ToList();
}
}
[HttpGet]
public IEnumerable<State> States(string countryCode)
{
using (ApplicationDbContext db = new ApplicationDbContext())
{
return db.States.Where(s => s.Country.Code == countryCode).OrderBy(o => o.Name).ToList();
}
}
[HttpGet]
public IEnumerable<City> Cities(int stateId)
{
using (ApplicationDbContext db = new ApplicationDbContext())
{
return db.Cities.Where(c => c.State.Id == stateId).OrderBy(o => o.Name).ToList();
}
}
}
第一个和第二个API,使用我在浏览器中输入的以下网址返回结果:
http://localhost:58211/api/lnax/states
http://localhost:58211/api/lnax/states/USA
但是当我使用这个网址时,第3个会返回错误:http://localhost:58211/api/lnax/cities/5
找不到与请求URI匹配的HTTP资源&#39; http://localhost:58211/api/lnax/cities/5&#39;。
控制器上未找到任何操作&#39; LNAX&#39;与请求匹配。
编辑:
这是我的配置代码:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { action = "Get", id = RouteParameter.Optional }
);
}
}
答案 0 :(得分:0)
我认为您已经配置了类似的Web API路由:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{countryCode}",
defaults: new { countryCode = RouteParameter.Optional }
);
您必须告知它您要将countryCode
分配给stateId
。
您可以对参数使用[FromUri]
属性:
[HttpGet]
public IEnumerable<City> Cities([FromUri(Name ="countryCode")]int stateId)
{
using (ApplicationDbContext db = new ApplicationDbContext())
{
return db.Cities.Where(c => c.State.Id == stateId).OrderBy(o => o.Name).ToList();
}
}
答案 1 :(得分:0)
考虑到您的配置,问题是参数的名称。
在您的配置中,您有id
作为参数,但在您的方法中,您有stateId
,因此您需要使用参数转换
将您的方法签名更改为:
public IEnumerable<City> Cities([FromUri(Name = "id")]int stateId)