【发布时间】:2018-05-24 11:24:42
【问题描述】:
我有 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,使用我在浏览器中输入的以下 url 返回结果:
http://localhost:58211/api/lnax/states
http://localhost:58211/api/lnax/states/USA
但是当我使用这个网址时,第三个返回错误:http://localhost:58211/api/lnax/cities/5
未找到与请求 URI“http://localhost:58211/api/lnax/cities/5”匹配的 HTTP 资源。
在控制器“LNAX”上找不到与请求匹配的操作。
编辑:
这是我的配置代码:
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 }
);
}
}
【问题讨论】:
-
您是否尝试过添加明确的
Route并使用它?也许试试[Route("/api/lnax/cities/{state}/")] -
如果我使用 Route 属性,它会起作用,但我不想这样做并且想让它在没有属性的情况下工作
-
这可能是因为
5被认为是string。尝试将您的方法签名更改为public IEnumerable<City> Cities(string stateId),然后看看它是否命中。 -
在此处查看一些示例:stackoverflow.com/questions/11407267/…
-
当我使用字符串类型而不是 int 时没有变化。让我看看你发的链接
标签: c# asp.net-web-api2