特殊情況,我有這樣的方法路由的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