Разрешить частичный / неполный маршрут в просмотре - PullRequest
1 голос
/ 06 мая 2020

У меня есть контроллер API, который живет по адресу /api/Test/Foo/1234

[Area("Api")]
[ApiController]
[Route("/api/[controller]/[action]")]
public class TestController : ControllerBase
{
    [HttpGet("{id}", Name= "TestRouteName")]
    public IActionResult Foo(int id)
    {   
        ....
    }
}

В представлении я могу правильно разрешить этот URL-адрес с @Url.RouteUrl("TestRouteName", new { id = 1234 }) до /api/Test/Foo/1234

Есть ли способ чтобы я просто вернул /api/Test/Foo/ (чтобы его позже использовал JavaScript)?

Я пробовал @Url.RouteUrl("UserProfile"), но это возвращает пустую строку, @Url.Action("Foo", "Test", new { area = "api" } возвращает /Test/Foo?area=api

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Проблема в том, что ваша маршрутизация по умолчанию для «id» фактически добавляет его в URL-адрес, а не использует его в качестве параметра запроса. Попробуйте что-то вроде ниже.

Контроллер

    [HttpGet(Name = "TestRouteName")]
    public IActionResult Foo(int id)
    {
        .........
    }

Просмотр

    @(Url.RouteUrl("TestRouteName"))

URL для доступа к просмотру

    api/Test/Foo?id=1234

Или вы можете просто использовать следующее, чтобы получить то, что хотите.

    @(Url.Action("Foo", "Test"))
0 голосов
/ 06 мая 2020

Чтобы ничего не указывать (null) для параметра маршрута id, вы должны поставить вопросительный знак ? после имени ( ссылка ):

[HttpGet("{id?}", Name= "TestRouteName")]
public IActionResult Foo(int id)
{   
    ....
}

Обратите внимание, однако, что если вы не сделаете свой параметр int id обнуляемым, значение по умолчанию для id будет 0 при доступе к маршруту.

...