2016-11-29 76 views
5

我在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" }); 
     }); 

我一定已經忘記了一些東西,但我什麼也沒看到。

任何人都可以幫到我嗎?

+0

確保有沒有重複的路線。 –

回答

8

試試這個。您可以在控制器上放置一個通用路由前綴。

[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