Usunięcie nazw parametrów z adresu url

0

Cześć,
Możecie mi powiedzieć w jaki sposób mogę usunąć nazwy parametrów z url'a w asp.net mvc 5?
np teraz mam localhost/Shop?page=1&pageSize=10&productId=1 natomiast uzyskac rezultat localhost/Shop/1/10/1/
RouteConfig mam standardowy, przypuszczam, że tutaj coś trzeba zmienić ale nie mam pojęcia co :(

Głowię się już z tym chwilę i nie mogę nic wymyślić.

Z góry dziękuję za odpowiedzi ;)
Pozdrawiam

0

W sensie pierwszy link działa, a drugi nie? Jak zdefiniowałeś metodę w kontrolerze? (pokaż kod)

0

Dokładnie tak public ActionResult Index(int page = 1, int pageSize = 10, string productId = "")

Natomiast RouteConfig tak jak wspomniałem mam domyślny:

public static void RegisterRoutes(RouteCollection routes)
{
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Dashboard", action = "Index", id = UrlParameter.Optional }
    );
}
0

Wpisz sobie nad nazwa akcji:
[Route("{page}/{pageSize}/{productId}")]

I dotyczyć to będzie wyłącznie tej akcji.

0

Niestety ale to nie działa. Dalej muszę używać starego url'a. Jakieś inne pomysły?

0

Czyli chcesz mieć dwa formaty URL - jeden z query stringiem, a drugi w formacie samej ścieżki?

0

Nie

0

Nie, nie chce mieć ten drugi format

0

Możesz zdefiniować routing w samym kontrolerze. Musisz najpierw odblokować w konfuguracji MvcAttrubuteRoutes.

  routes.MapMvcAttributeRoutes();

Możesz teraz nadawać atrybuty w kontrolerze, nad samym kontrolerem jak i przed konkretnymi akcjami.

[RoutePrefix(“page”)]
public class PageController : Controller 
{
  //...
}

W ten sposób żądania zaczynający się od page/ będą przekazywane do tego kontrolera.

[Route("{page}/{pageSize}/{productId}")]
public ActionResult Show(int page, int pageSize, int productId)
{
  //...
}

W tym przypadku url /page/1/4/32 zostanie zostanie skierowany na Show(int page, int pageSize, int productId) w kontrolerze PageControler.
Zroutowałem kontroler, bo nie wiem jakie masz ustawione domyślne mapowanie routingu. Jeżeli coś takiego, to powinno zadziałać.

routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );

1 użytkowników online, w tym zalogowanych: 0, gości: 1