#c# #asp.net #asp.net-mvc #routes #webapi
#c# #asp.net #asp.net-mvc #маршруты #webapi
Вопрос:
Я хочу создать перенаправление URL-адреса на c #, поэтому всякий раз, когда в базовом URL-адресе моего приложения MVC отображаются параметры, я хочу перенаправить его на другой URL-адрес на основе параметров в URL-адресе (сайт, папка, файл, идентификатор и т.д.), Например: http://localhost:8080/site/folder/file/id или http://localhost:8080/site/folder/file или http://localhost:8080/site/folder и т.д. Таким образом, URL-адрес запроса может быть любого типа, только базовый URL будет исправлен.
Я попытался обновить маршрут по умолчанию как
routes.MapRoute(
name: "Default",
url: "{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
Также я попытался создать пользовательский новый маршрут как
routes.MapRoute(
"DCTM", // Route name
"Da/{objectId}", // URL with parameters
new { controller = "Home", action = "Redirector" } // Parameter defaults
);
Но оба вышеуказанных подхода выдают ошибку. Что можно сделать для достижения этого?
Комментарии:
1. Можете ли вы привести конкретный пример входящего URL-адреса? Когда вы говорите «параметры в URL», вы имеете в виду, например, что вы хотите преобразовать что-то вроде
http://localhost:8080?site=xamp;folder=yamp;file=zamp;id=1
вhttp://localhost:8080/x/y/z/1
?2. Входящий URL: localhost: 8080 / x / y / z / 1 , я хочу прочитать x, y, z из URL-адреса и перенаправить его на какой-либо другой URL, у которого есть параметры x, y, z
3. И что такое «какой-то другой URL»… как будет выглядеть этот URL-адрес? Мы не можем предложить решение, если вы не предоставите конкретный пример. Также имейте в виду, что точка маршрутизации в MVC заключается в направлении к определенному методу действия. Можете ли вы точно объяснить цель преобразования вашего URL-адреса? Конечно, вам просто нужно убедиться, что если пользователь вводит
localhost:8080/x/y/z/1
, то он переходит к правильному действию. В чем причина желания изменить это, чего это даст вам?4. я четко упомянул все материалы, о которых идет речь
5. При всем уважении, если бы вы упомянули все, то я бы не просил вас разъяснять это. Итак, скажите нам четко, если пользователь ставит
localhost:8080/x/y/z/1
, что вы хотите с этим делать и почему? Вы сказали, что хотите перенаправить его на другой URL-адрес, но вы не сказали, каким должен быть этот URL-адрес или как все это связано с вашими контроллерами и действиями.
Ответ №1:
У меня есть решение!!! Перенаправить любой входящий URL-адрес веб-приложения на любое другое веб-приложение, как показано ниже
- Обновите RouteConfig.cs как
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Dctm",
url: "{*nodeAliasPath}",
defaults: new { controller = "Home", action = "Redirector", id = UrlParameter.Optional }
);
}
- Теперь добавьте целевой URL-адрес и добавьте к нему URL-адрес источника в HomeController.cs как
public ActionResult Redirector()
{
string destinationURL = "Destination base url" Request.RawUrl; // combine the destination base url and source url parameters.
return Redirect(destinationURL);
}
Вывод:
- Исходный URL: https://localhost:44306/Abc/Xyz/632-sn232-erh4
- Перенаправить URL: https://localhost:44396/Abc/Xyz/632-sn232-erh4
Комментарии:
1. Я рад, что вы нашли что-то, что работает для вас. Но на самом деле для такого простого случая, как приведенный вами пример, где вы меняете только базовый URL, правило перезаписи IIS могло бы выполнить ту же работу с гораздо меньшими затратами, чем приложение MVC. (И эти правила могут обрабатывать и более сложные случаи).
2. Спасибо за предложение @ADyson, но мне нужно использовать этот подход, поскольку это небольшой шаг в логике объятий, поэтому нужно делать это только в MVC
3. Я не говорю, что вам не нужно приложение MVC для вашей другой логики, но я говорю, что оно вам не нужно для этой конкретной задачи.