【发布时间】:2017-08-16 08:19:51
【问题描述】:
特殊情况,我有这个方法
[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);
}
更新
同一个控制器里还有另外一种方法,这里是这个
[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 (也许)。
-
不,不是这样,很遗憾
-
控制器类上的属性
RoutePrefix("api/models")和方法上的属性Route("getallmachines")会发生什么 -
同样的问题,不起作用
-
结果码404或403是什么?
标签: c# asp.net rest asp.net-web-api