2015-08-05 2 views
5

Я пытаюсь изучить новый MVC 6. Я никогда раньше не использовал структуру Microsoft MVC. Я пытаюсь улучшить простой веб-интерфейс учебника, добавляя ссылки на различные действия моих контроллеров, используя URL-адрес (urlhelper) контроллера (главный контроллер показывает, что может сделать API). Но когда я использую:Создание ссылки с использованием urlhelper в контроллере MVC 6 (vNext)

this.Url.Action("Get", new {id = id}); 

Я получаю строку запроса с URL. Мне нужен URL более спокойного стиля.

Я думал, что при использовании маршрутизации атрибутов мне не нужно отображать определенный маршрут, как я вижу в старых учебниках WebApi.

Должен ли я отображать маршрут? Что мне нужно сделать, чтобы получить более спокойный стиль URL?

ответ

3

Вы можете добавить имя к атрибутам маршрута в своем контроллере, а затем использовать метод расширения IUrlHelper.RouteUrl для генерации URL-адреса.

К примеру, учитывая следующие контроллер веб-апи:

[Route("api/[controller]")] 
public class UsersController : Controller 
{ 
    // GET: api/users 
    [HttpGet] 
    public IEnumerable<string> Get() 
    { 
     return new string[] { "value1", "value2" }; 
    } 

    // GET api/users/5 
    [HttpGet("{id}", Name ="UsersGet")] 
    public string Get(int id) 
    { 
     return "value"; 
    } 

    //additional methods... 
} 

Вы можете генерировать URL api/users/123 для конкретного както действия идентификатора с помощью @Url.RouteUrl("UsersGet", new { id = 123 }).

Проблема при использовании метода расширения Url.Action заключается в том, что если у вас есть контроллер, как в приведенном выше примере, с двумя действиями с именем «Get», это будет использовать маршрут для действия без параметров и генерировать /api/Users?id=123. Однако, если вы прокомментируете этот метод, вы увидите, что @Url.Action("Get", "Users", new { id = 123 }) также дает ожидаемый url.

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