Методы Map и MapWhen

Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core 7

Последнее обновление: 30.10.2019

Метод Map

Метод 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().

Обработка запроса методом app.Map в ASP.NET Core

Вложенные методы Map

Метод 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

Похожим образом работает метод 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");
    });
}
Обработка запроса методом app.MapWhen в ASP.NET Core

В данном случае если в запросе указан параметр id и он имеет значение 5, то запрос обрабатывается функцией HandleId(). К подобным запросам будут относиться, например, запрос http://localhost:55234/?id=5 или http://localhost:55234/product?id=5&name=phone, так как обе строки запроса содержат параметр id равный 5. А все остальные запросы также будут обрабатываться делегатом, передаваемым в метод app.Run().

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850