web-dev-qa-db-fra.com

Obtenez l'itinéraire complet vers l'action en cours

J'ai une API simple avec un routage de base. Il a été configuré à l'aide du modèle d'API ASP.NET Core Visual Studio 2015 par défaut.

J'ai ce contrôleur et cette action:

[Route("api/[controller]")]
public class DocumentController : Controller
{
    [HttpGet("info/{Id}")]
    public async Task<Data> Get(string Id)
    {
        //Logic
    }
}

Donc, pour atteindre cette méthode, je dois appeler GET /api/document/info/some-id-here.

Est-il possible avec .NET Core, à l'intérieur de cette méthode, de récupérer sous forme de chaîne l'itinéraire complet?

Je pourrais donc faire par exemple:

var myRoute = retrieveRoute();

// myRoute = "/api/document/info/some-id-here"
23
BlackHoleGalaxy

Vous pouvez obtenir l'URL complète demandée en utilisant l'option Request (HttpRequest) dans .Net Core.

var route = Request.Path.Value;

Votre code final.

[Route("api/[controller]")]
public class DocumentController : Controller
{
    [HttpGet("info/{Id}")]
    public async Task<Data> Get(string Id)
    {
        var route = Request.Path.Value;
    }
}

Route des résultats: "/ api/document/info/some-id-here" // par exemple

31
Balaji Marimuthu

Vous pouvez également demander à MVC de créer une nouvelle URL de route en fonction des valeurs de route actuelles:

[Route("api/[controller]")]
public class DocumentController : Controller
{
    [HttpGet("info/{Id}")]
    public async Task<Data> Get(string Id)
    {
        //Logic

        var myRoute = Url.RouteUrl(RouteData.Values);
    }
}

Url.RouteUrl est une méthode d'aide qui vous permet de créer une URL de route en fonction des valeurs de route. RouteData.Values vous donne les valeurs de route pour la demande actuelle.

9
Nate Barbettini