ASP.net 核心路线 API
Routes in ASP.net Core 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
注意
Actions are inaccessible via conventional routes defined by
UseEndpoints, UseMvc, or UseMvcWithDefaultRoute in Startup.Configure.
所以你不能在 API
中使用 UseMvc 路由
来自:
https://docs.microsoft.com/en-US/aspnet/core/web-api/?view=aspnetcore-3.0
如果您打算使用类似于网络 API 的自定义操作名称。
[Route("api/[controller]")]
public class BXLogsController : Controller {
//GET api/BXlogs/blahapi
[HttpGet("{apiname}", Name = "GetLAPI")]
public IActionResult GetByAPI(string apiname) { ... }
}
有点扩展到@nkosi
所以你会打电话给
GET: https://localhost:44302/api/BXLogs/GetLAPI
我在 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
注意
Actions are inaccessible via conventional routes defined by UseEndpoints, UseMvc, or UseMvcWithDefaultRoute in Startup.Configure.
所以你不能在 API
中使用 UseMvc 路由来自: https://docs.microsoft.com/en-US/aspnet/core/web-api/?view=aspnetcore-3.0
如果您打算使用类似于网络 API 的自定义操作名称。
[Route("api/[controller]")]
public class BXLogsController : Controller {
//GET api/BXlogs/blahapi
[HttpGet("{apiname}", Name = "GetLAPI")]
public IActionResult GetByAPI(string apiname) { ... }
}
有点扩展到@nkosi
所以你会打电话给
GET: https://localhost:44302/api/BXLogs/GetLAPI