在ASP.net核心API的路线
问题描述:
我在Asp.net核心阅读了很多关于API路线的话题,但是我无法让它工作。在ASP.net核心API的路线
首先,这是我的控制器:
Public class BXLogsController : Controller
{
//[HttpGet("api/[controller]/ID/{id}", Name = "GetL")]
public IActionResult GetById(string id)
{
if (id.Trim() == "")
return BadRequest();
else
{
Logs l = AccessBase.AccBase.GetLog(id);
return Json(l);
}
}
//[HttpGet("api/[controller]/API/{apiname}", Name = "GetLAPI")]
public IActionResult GetByAPI(string apiname)
{
if (apiname.Trim() == "")
return BadRequest();
else
{
List<Logs> lstLogs = AccessBase.AccBase.GetLogsApi(apiname);
return Json(lstLogs);
}
}
}
我试图用HttpGetAttribute
与路径(见注释),但不起作用。
所以我想用MapRoute
的方法,但那也行不通。
app.UseMvc(routes =>
{
routes.MapRoute(
name: "LogsId",
template: "api/[controller]/ID/{id}",
defaults: new { controller = "BXLogs", action = "GetById" });
routes.MapRoute(
name: "LogsAPI",
template: "api/[controller]/API/{apiname}",
defaults: new { controller = "BXLogs", action = "GetByAPI" });
});
我一定已经忘记了一些东西,但我什么也没看到。
任何人都可以帮到我吗?
答
试试这个。您可以在控制器上放置一个通用路由前缀。
[Route("api/[controller]")]
public class BXLogsController : Controller {
//GET api/BXlogs/id/blah
[HttpGet("ID/{id}", Name = "GetL")]
public IActionResult GetById(string id) { ... }
//GET api/BXlogs/api/blahapi
[HttpGet("API/{apiname}", Name = "GetLAPI")]
public IActionResult GetByAPI(string apiname) { ... }
}
阅读了关于属性的路由在这里Routing to Controller Actions
+1
或者本教程:[https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/first-web-api](https://docs.microsoft.com/zh-cn/aspnet/core /教程/第一的Web-API) – paulroho
确保有没有重复的路线。 –