Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core 7
Метод Map (и методы расширения MapXXX()
) применяется для сопоставления пути запроса с определенным делегатом, который будет
обрабатывать запрос по этому пути. Например:
public void Configure(IApplicationBuilder app) { app.Map("/index", Index); app.Map("/about", About); app.Run(async (context) => { await context.Response.WriteAsync("Page Not Found"); }); } private static void Index(IApplicationBuilder app) { app.Run(async context => { await context.Response.WriteAsync("Index"); }); } private static void About(IApplicationBuilder app) { app.Run(async context => { await context.Response.WriteAsync("About"); }); }
Теперь обращения к приложению типа http://localhost:xxxx/about будут обрабатываться с помощью метода About
,
а запросы типа http://localhost:xxxx/index - методом Index
.
А все остальные запросы будут обрабатываться делегатом из app.Run()
.
Метод Map может иметь вложенные методы Map, которые обрабатывают подмаршруты. Например:
public void Configure(IApplicationBuilder app) { app.Map("/home", home => { home.Map("/index", Index); home.Map("/about", About); }); app.Run(async (context) => { await context.Response.WriteAsync("Page Not Found"); }); } private static void Index(IApplicationBuilder app) { app.Run(async context => { await context.Response.WriteAsync("Index"); }); } private static void About(IApplicationBuilder app) { app.Run(async context => { await context.Response.WriteAsync("About"); }); }
Теперь метод About будет обрабатывать запрос не http://localhost:xxxx/about, а http://localhost:xxxx/home/about
Похожим образом работает метод MapWhen(). Он принимает в качестве параметра делегат Func<HttpContext, bool>
и
обрабатывает запрос, если функция, передаваемая в качестве параметра возвращает true.
public void Configure(IApplicationBuilder app) { app.MapWhen(context => { return context.Request.Query.ContainsKey("id") && context.Request.Query["id"] == "5"; }, HandleId); app.Run(async (context) => { await context.Response.WriteAsync("Good bye, World..."); }); } private static void HandleId(IApplicationBuilder app) { app.Run(async context => { await context.Response.WriteAsync("id is equal to 5"); }); }
В данном случае если в запросе указан параметр id и он имеет значение 5, то запрос обрабатывается функцией HandleId()
. К подобным запросам будут
относиться, например, запрос http://localhost:55234/?id=5 или http://localhost:55234/product?id=5&name=phone,
так как обе строки запроса содержат параметр id равный 5. А все остальные запросы также будут обрабатываться делегатом, передаваемым в метод app.Run()
.