ASP.net Core API中的路由

30

我阅读了很多关于Asp.net core 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" });
});

我一定忘了什么,但我什么也没看到。

有人能帮我吗?


确保没有重复的路由。 - Fabricio Koch
3个回答

48

试试这个。您可以在控制器上放置一个常见的路由前缀。

[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


4
这个教程是关于如何创建一个ASP.NET Core Web API的,你可以通过这个链接来查看:https://learn.microsoft.com/zh-cn/aspnet/core/tutorials/first-web-api。在这个教程中,你将学习如何使用Visual Studio创建一个Web API项目并编写代码来处理HTTP请求和响应。 - paulroho

2

如果您计划使用类似于Web API的自定义操作名称。

 [Route("api/[controller]")]
    public class BXLogsController : Controller {
        //GET api/BXlogs/blahapi
        [HttpGet("{apiname}", Name = "GetLAPI")]
        public IActionResult GetByAPI(string apiname) { ... }
    }

稍微扩展一下@nkosi的内容

所以你需要调用以下API:

GET: https://localhost:44302/api/BXLogs/GetLAPI


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接