2012-04-09 1 views
0

Как найти маршрут, соответствующий строковому URL-адресу в ASP.NET MVC?Как найти маршрут, соответствующий URL-адресу?

Это не для отладки.

Я создаю ссылку, используя Request.UrlReferrer, но мы должны ограничить это конкретными действиями контроллера в нашем приложении. В идеале мы бы так что-то вроде этого:

@Url.PreviousUrl(
    default: Url.Action("index", "home") 
    validRoutes: new[] { 
     new { controller = "list", "projects" } 
     new { controller = "tagged", "projects" }, 
     new { controller = "details", "category" } 
    } 
); 

Если UrlReferrer матчи любой из этих маршрутов, то мы будем перенаправлять на нее, в противном случае мы будем перенаправлять на URL по умолчанию, заданный.

+0

Я думаю, этот вопрос охватывает его http://stackoverflow.com/questions/3545432/how-to-get-routedata- по-ссылке. Я пытался сделать то же самое, и этот ответ решил это для меня. – GraemeMiller

ответ

3

Вы можете вызвать GetRouteData следующим образом. Там может быть лучше, но я использовал аналогичный в модульном тестировании

http://bradwilson.typepad.com/blog/2010/07/testing-routing-and-url-generation-in-aspnet-mvc.html

+0

Спасибо Адаму - это сделал трюк. Я подумал, что, может быть, я мог бы избежать укусов/издевательств по http-контексту, но он кажется достаточно чистым. Я опубликовал свой текущий взломанный/плохо протестированный код на странице https://gist.github.com/2346138 :) –

+0

У вас есть ссылка на текущий httpcontext, что произойдет, если вы его используете, то есть что мешает вам использовать его ? –

+0

Привет, Адам. Если я использую текущий HttpContext, «HttpContext.Request.Url» (только для чтения) устанавливается на текущую страницу. Мне нужно создать HttpContext для ** предыдущего ** url страницы (тот, который я проверяю), чтобы увидеть, соответствует ли он определенным маршрутам. Имеет ли это смысл? –

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