.NET Core 3 API — перестает работать после одного запроса?

У меня странная проблема, когда запросы работают только один раз. Это происходит как в IIS, так и в IIS Express. Если я перезапущу/перезагрузлю, он снова сработает, но все же только один раз. Размещение точки останова показывает, что последующие запросы никогда не попадают в контроллер...

[HttpGet("private/{zipCode}")]
public IActionResult PrivateZipSearch(string zipCode)

Запуск.Настройка

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IServiceProvider srv, ILoggerFactory loggerFactory)
{
     loggerFactory.AddProvider(new DbLoggerProvider(this.Configuration, srv.GetService<IHttpContextAccessor>()));

     app.UseHttpsRedirection(); // Redirect HTTP -> HTTPS
     app.UseRouting();
     {
         app.UseCors(Config.Settings.Cors.PolicyName);
         app.UseAuthentication();
     }

     // Hangfire
     {
         app.UseHangfireDashboard();
         app.UseHangfireServer();
     }

     app.UseMiddleware<LoggingMiddleware>();
     app.UseMiddleware<OptionsVerbMiddleware>();

     // Must be last!
     app.UseEndpoints(x => x.MapControllers());
 }

Любые предложения будут ценны! Спасибо!


person Ber53rker    schedule 07.10.2019    source источник
comment
Перестать работать, как в приложении IIS, останавливается? Какие коды ответов на первый и второй запрос? Есть ли какие-нибудь подсказки в журнале?   -  person Ruard van Elburg    schedule 07.10.2019
comment
Спасибо за ваш комментарий @RuardvanElburg. IIS не останавливается, и все коды ответов равны 200. Журнал не предлагает ничего полезного.   -  person Ber53rker    schedule 08.10.2019
comment
Тогда я не понимаю, что вы имеете в виду под неработающим. Можете ли вы объяснить немного больше? Если запросы возвращают 200, то что не работает?   -  person Ruard van Elburg    schedule 08.10.2019
comment
Первый запрос попадает в контроллер и возвращает данные, последующие запросы не возвращают, несмотря на очевидное возвращение 200.   -  person Ber53rker    schedule 08.10.2019
comment
Это указывало бы на короткое замыкание трубопровода до того, как он достиг контроллера. Есть ли разница между двумя запросами на авторизацию? Чем вы можете это исключить. Из вашего кода есть четыре потенциальных промежуточного программного обеспечения, наиболее вероятные: HangfireDashboard, HangfireServer и LoggingMiddleware, OptionsVerbMiddleware. Добавьте ведение журнала, чтобы увидеть, какое промежуточное ПО вызывает короткое замыкание, или попробуйте отключить/включить промежуточное ПО. А также обратите внимание на фильтры.   -  person Ruard van Elburg    schedule 09.10.2019


Ответы (2)


Оказывается, это было потому, что я устанавливал HttpContext в поле.

Существует множество правил, которые можно и нельзя делать, которые можно найти здесь: https://github.com/davidfowl/AspNetCoreDiagnosticScenarios/blob/master/AspNetCoreGuidance.md#do-not-store-ihttpcontextaccessorhttpcontext-in-a-field

person Ber53rker    schedule 09.10.2019

В моем случае мой Core 3.0 API закрылся после того, как я отправил ему запрос, потому что у меня был бесконечный цикл в моих репозиториях, например:

EmpresaРепозиторий:

    public class EmpresaRepository : BaseRepository<Empresa>, IEmpresaRepository
    {
        private readonly EstabelecimentoRepository estabelecimentoRepository;

        public EmpresaRepository(Context Context) : base(Context)
        {
            estabelecimentoRepository = new EstabelecimentoRepository(Context);
        }
    }

EstabelecimentoRepository:

public class EstabelecimentoRepository : BaseRepository<Estabelecimento>, IEstabelecimentoRepository
{
    private readonly EmpresaRepository empresaRepository;

    public EstabelecimentoRepository(Context Context) : base(Context)
    {
         empresaRepository = new EmpresaRepository(Context);
    }
}

Итак, в EstabelecimentoRepository я удалил empresaRepository, и мой API снова заработал.

person Desenvolvedor5 Digi Byte    schedule 26.11.2019