Проблемы маршрутизации ASPMvc с устаревшим URL - PullRequest
0 голосов
/ 31 мая 2011

У меня есть устаревший URL-адрес, который я не могу изменить, и который выводится на странице, которую необходимо опубликовать в новой версии страницы MVC:

http://somesite.com/somepage?some-guid=xxxx-xxxx

Теперь я пытаюсь сопоставить это с новым контроллером, но мне нужно вставить некоторый гид в мой контроллер:

public class MyController : Controller
{
    [HttpGet]
    public ActionResult DisplaySomething(Guid myGuid)
    {
        var someResult = DoSomethingWithAGuid(myGuid);
        ...
    }
}

Я могу менять контроллер и маршруты сколько угодно, однако устаревший URL не может измениться. Так что я немного озадачен тем, как я могу получить доступ к некоторому руководству.

Я попытался выполнить маршрутизацию с помощью «some-guid = {myGuid}», но маршрутизации не нравится «?», Поэтому я попытался разрешить автоматическую привязку, но, поскольку она содержит дефисы, она, похоже, не связывается. Мне было интересно, есть ли какой-либо тип атрибута, который я мог бы использовать, чтобы намекнуть, что он должен связываться с частью строки запроса ...

Любая помощь будет великолепна ...

Ответы [ 3 ]

0 голосов
/ 31 мая 2011

Попробуйте это:

routes.MapRoute("SomePageRoute","Somepage", 
   new { controller = "MyController", action = "DisplaySomething" });

А затем в вашем контроллере:

public ActionResult DisplaySomething() {
   Guid sGuid = new Guid(Request.QueryString["some-guid"].ToString());
}
0 голосов
/ 01 июня 2011

Я бы подумал, что вы бы сделали маршрут немного похожим на этот ..

routes.MapRoute(
                "RouteName", // Name the route
                "somepage/{some-guid}", // the Url
                new { controller = "MyController", action = "DisplaySomething", some-guid = UrlParameter.Optional }
            );

Часть URL-адреса {some-guid} соответствует вашему параметру URL и передает его контроллеру.

Итак, если у вас есть такие действия:

public ActionResult DisplaySomething(Guid some-guid)
    {
        var someResult = DoSomethingWithAGuid(some-guid);
        ...
    }

Пойди и посмотри, как ты поживаешь ..

0 голосов
/ 31 мая 2011
routes.MapRoute(
  "Somepage", // Route name
  "simepage", // URL with parameters
  new { controller = "MyController", action = "DisplaySomething"
);

А потом в вашем контроллере:

public class MyController : Controller {
    public ActionResult DisplaySomething(Guid myGuid)
    {
        var someResult = DoSomethingWithAGuid(myGuid);
        ...
    }
}
...