2017-01-06 3 views
5

У меня есть простой API с базовой маршрутизацией. Он был настроен с использованием стандартного шаблона API ASP.NET по умолчанию для Visual Studio 2015.Получить полный маршрут к текущему действию

У меня есть этот контроллер и действие:

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

Так, чтобы достичь этого метода, я должен вызвать GET /api/document/info/some-id-here.

Возможно ли, что .NET Core, внутри этого метода, получить в качестве строки полный маршрут?

Так что я мог бы сделать, например:

var myRoute = retrieveRoute(); 

// myRoute = "/api/document/info/some-id-here" 
+0

Попробуйте [HttpGet ("info/{Id?}")] –

+0

Я там! спасибо за ваш комментарий, но вопрос в том, чтобы получить в качестве строки в методе маршрут, следующий для достижения метода. Моя маршрутизация работает хорошо в данный момент, и я не могу установить Id как необязательный. – BlackHoleGalaxy

+0

Хорошо, вопрос был отредактирован. –

ответ

7

Вы можете получить полную запрошенную URL с помощью Request вариант (HttpRequest) в .Net Core.

var route = Request.Path.Value; 

Ваш окончательный код.

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

Результат маршрута: "/ API/документ/информация/некоторые-Ид здесь" // например

+0

Спасибо, что работает! – BlackHoleGalaxy

+0

Это здорово, когда ваш код находится внутри действия. Что делать, если вам нужен путь к действию, скажем, в представлении? – Serge

4

Вы также можете попросить MVC создать новый URL маршрута на основе текущего маршрута значения:

[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 является вспомогательным методом, который позволяет построить URL маршрута для любых значений маршрута. RouteData.Values дает вам значения маршрута для текущего запроса.

+0

Спасибо, что работает! Вы знаете, как я могу фильтровать часть после/api/например? – BlackHoleGalaxy

+0

@BlackHoleGalaxy Что значит «фильтр»? –

+0

В моем примере извлечения только части после/api/моего маршрута: '/ document/info/Id' – BlackHoleGalaxy

Смежные вопросы