ASP.net Core API 中的路由
Posted
技术标签:
【中文标题】ASP.net Core API 中的路由【英文标题】:Routes in ASP.net Core API 【发布时间】:2017-04-13 14:38:08 【问题描述】:我在 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" );
);
我一定忘记了什么,但我什么也没看到。
谁能帮帮我?
【问题讨论】:
确保没有重复的路线。 【参考方案1】:试试这个。您可以在控制器上放置一个通用的路由前缀。
[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
【讨论】:
或本教程:https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api【参考方案2】:如果您打算使用类似于 Web 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
【讨论】:
【参考方案3】:注意
动作无法通过定义的常规路由访问 Startup.Configure 中的 UseEndpoints、UseMvc 或 UseMvcWithDefaultRoute。
所以你不能使用带有 API 的 UseMvc 路由
来自: https://docs.microsoft.com/en-US/aspnet/core/web-api/?view=aspnetcore-3.0
【讨论】:
以上是关于ASP.net Core API 中的路由的主要内容,如果未能解决你的问题,请参考以下文章
基于属性的路由 VS 基于约定的路由 - ASP.net Core RESTful API 的最佳实践 [关闭]