Все облазил, не могу сообразить, как сделать следующее:
1. Если человек в адресной строке пишет: mysite.ru/home/index или просто mysite.ru, то его перенаправляет на контроллер HomeController->Index. Тут все как обычно.
2. Но если человек пишет: mysite.ru/hello или что либо другое вместо hello, то ему надо вернуть просто строку. При этом надо прочесть что же написано в адресе (в данном примере написано hello).
// Пример как я пробовал сделать в методе Startup->Configure через Map.
// Тут 2 минуса: не известно как получить то, что написано в маршруте (в примере это hello) и здесь придется на старте приложения задать все строки, а они могут быть любые.
app.Map("/visexp",
(appBuilder) =>
{
appBuilder.Run(async (context) =>
{
await context.Response.WriteAsync("строка -" + ПеременнаяСhello);
});
});
Пример, что должно быть: человек пишет mysite.ru - отрабатывает HomeController; Человек пишет mysite.ru/radomtext - у него обновляется страница где просто написано Строка - radomtext
Чтобы сделать стандартный выделенный маршрут без второго слеша, то есть обращаться к контроллеру не так mysite.io/home/index, а так mysite.io/index, то в Startup.cs писать следующий роут:
app.UseMvc(routes =>
{
routes.MapRoute( // роутинг на стандартный ноум контроллер всегда
name: "default",
template: "/{action=Index}/{id?}",
defaults: new { controller = "Home" });
});
Чтобы сделать как я хотел, сохранить стандартный роутинг и одновременно на один конкретный контроллер отправлять все остальное, что не прошло по стандартному роутингу надо делать так:
app.UseMvc(routes =>
{
routes.MapRoute( // почти стандартный роутинг, он автоматом на home/index не кидает.
name: "default",
template: "{controller}/{action}/{id?}");
app.Run(async (context) => // если по стандартному маршруту ни чего не нашлось, то выполняется данный код
{
string url = context.Request.Path.Value.TrimEnd('/'); // получаем ссылку по которой перешли
await context.Response.WriteAsync("Hi" + url);
});
});
Продвижение своими сайтами как стратегия роста и независимости