特殊情况,我有这样的方法路由的HTTP GET不带参数不起作用(web.api)
[HttpGet]
[Route("api/models/getallmachines")]
public IHttpActionResult GetAllMachines()
{
var model= db.machine.ToList();
return Ok(model);
}
,我总是得到的资源没有被发现叫http://localhost:xxx/api/models/getallmachines
时。但如果我添加一个参数,说
[HttpGet]
[Route("api/models/getallmachines/{blub}")]
public IHttpActionResult GetAllMachines(int blub)
{
var model= db.machine.ToList();
return Ok(model);
}
它与http://localhost:xxx/api/models/getallmachines/0
一起使用!为什么?这是我的webapiconfig
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);
}
UPDATE
有在同一个控制器的另一种方法,这一个在这里
[HttpGet]
[Route("api/models/getmodel/{id}")]
public IHttpActionResult GetModel(int id)
{
var model = models.FirstOrDefault(p => p.ApiModelId == id);
if (model == null)
return NotFound();
return Ok(model);
}
这给了我浏览器中的json文件和这个路由调试信息
如果将routeTemplate更改为“api/{controller}/{action}/{id}”,会发生什么情况。然后getallmachines将被映射为动作。我怀疑它现在可能被解释为id(也许)。 – m4ttsson
不,那不是它,可惜的是 – rst
什么对你的控制器类的属性'RoutePrefix(“API /模型”)'和你的方法 – Troopers