我已经配置我的WebApiConfig像这样:
public static void Register(HttpConfiguration config) { config.Routes.MapHttpRoute( name: "DefaultApi",routeTemplate: "api/{controller}/{action}/{id}",defaults: new { id = RouteParameter.Optional } ); }
我有一个方法接受一个参数。访问URI是http:// localhost:8598 / api / WebApi / GetLocationCategory / 87。
这给我一个错误:没有找到匹配请求URI’http:// localhost:8598 / api / WebApi / GetLocationCategory / 87’的HTTP资源。
控制器:
public IEnumerable<LocationCategory_CLS> GetLocationCategory(int CatID) { var LocCats = (from lct in entities.tdp_LocationCategories join lc in entities.tdp_LocationMaster on lct.FK_LocationID equals lc.LocationID where lct.IsApproved == 0 && lct.FK_CategoryID == CatID select new { lc.LocationID,lc.LocationName }).ToList(); List<LocationCategory_CLS> loc = new List<LocationCategory_CLS>(); foreach (var element in LocCats) { loc.Add(new LocationCategory_CLS { LocationID = element.LocationID,LocationName = element.LocationName }); } return loc; }
解决方法
尝试将Controller方法更改为
public IEnumerable<LocationCategory_CLS> GetLocationCategory(int id) <-- Change { var LocCats = (from lct in entities.tdp_LocationCategories join lc in entities.tdp_LocationMaster on lct.FK_LocationID equals lc.LocationID where lct.IsApproved == 0 && lct.FK_CategoryID == id select new { lc.LocationID,LocationName = element.LocationName }); } return loc; }
更改只是,将输入参数从CatId更改为id ….它适用于我很多次..
编辑:
它很长时间,当我回头我认为我知道原因现在。字像Jared是正确的,这是与我们指定的路由。如果我有一个路由(默认)为:
routes.MapRoute( "Default",// Route name "{controller}/{action}/{id}",// URL with parameters new { controller = "Home",action = "Index",id = "" } // Parameter defaults );
我的URL是/ MyController / GetLocationCategory / 123,它将等同于/ MyController / GetLocationCategory?id = 123。
类似地,如果我想更改我的参数名称为Id说为CatId,那么我需要更改查询字符串参数(我调用我的Controller Action会改变的方式)。现在是:
/ MyController / GetLocationCategory?CatId = 123