web-dev-qa-db-fra.com

Itinéraires dans l'API ASP.net Core

J'ai lu beaucoup de sujets sur les routes pour l'API dans le noyau Asp.net mais je ne peux pas le faire fonctionner.

Tout d'abord, voici mon contrôleur:

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);
        }
    }
}

J'ai essayé d'utiliser le HttpGetAttribute avec le chemin (reportez-vous au commentaire) mais cela ne fonctionne pas.

Je veux donc utiliser l'approche MapRoute mais cela ne fonctionne pas aussi.

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

J'ai dû oublier quelque chose mais je ne vois rien.

Est-ce que quelqu'un peut m'aider ?

16
Gobelet

Essaye ça. Vous pouvez mettre un préfixe de route commun sur le contrôleur.

[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) { ... }
}

lisez le routage des attributs ici Routage vers les actions du contrôleur

29
Nkosi