Почему ASP.NET Core выполняет пользовательское промежуточное ПО только один раз? - PullRequest
0 голосов
/ 02 октября 2018

У меня есть ASP.NET Core со следующим контроллером, который принимает запрос POST:

[Route("api/v1/tenants/tests")]
public class TestsController : Controller
{
    [HttpPost]       
    public IActionResult Post(string tenantId)
    {
        return Ok();
    }
}

Я разработал «нулевое» промежуточное программное обеспечение для тестирования.Он определен в методе Configure файла Startup.cs:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
     if (env.IsDevelopment())
     {
         app.UseDeveloperExceptionPage();
     }

     app.UseMvc();

     app.Use(async (context, next) =>
     {
         // Forward to the next one.
         await next.Invoke();
     });
}

Вопрос

Когда я вызываю контроллер через Почтальона, начальный вызовPOST метод успешно проходит через промежуточное ПО, а затем в контроллер.Однако следующие вызовы напрямую отправляются в контроллер, полностью пропуская промежуточное ПО.Почему это?

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Промежуточное программное обеспечение должно быть настроено до вызова app.UseMvc().

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
     if (env.IsDevelopment())
     {
         app.UseDeveloperExceptionPage();
     }

     app.Use(async (context, next) =>
     {
         // Forward to the next one.
         await next.Invoke();
     });

     // !! Have to be called after setting up middleware !!
     app.UseMvc();
}

Эта информация присутствует в документации , но я не знал, что онаприменимо и к пользовательским промежуточным программам:

Порядок добавления компонентов промежуточного программного обеспечения в метод Startup.Configure определяет порядок, в котором компоненты промежуточного программного обеспечения вызываются по запросам, и обратный порядок ответов.Порядок имеет решающее значение для безопасности, производительности и функциональности.

Следующий метод Startup.Configure добавляет компоненты промежуточного программного обеспечения для распространенных сценариев приложения:

1 - Обработка исключений / ошибок

2 - HTTP Strict Transport Security Protocol

3 - Перенаправление HTTPS

4 - Статический файловый сервер

5 - Применение политики cookie

6 - Аутентификация

7 - Сессия

8 - MVC

0 голосов
/ 02 октября 2018

Startup.Configure() выполняется один раз при запуске приложения.Он используется для подготовки к заявке, он не выполняется с каждым вызовом.Однако вы можете использовать его для настройки промежуточного программного обеспечения, которое выполняется при каждом вызове.Документация microsoft для запуска основного приложения asp.net содержит несколько примеров Configure и ConfigureServices.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...