Каков правильный порядок AddCors в .Net Core? - PullRequest
1 голос
/ 16 апреля 2019

Первое промежуточное программное обеспечение MVC или промежуточное программное обеспечение Cors.

    services.AddMvc()
    services.AddCors();

Извините, официальные документы упоминают выше, однако я видел и другие примеры с обратным порядком.взгляд на внутренности о том, как это работает?

Ответы [ 2 ]

4 голосов
/ 16 апреля 2019

Службы с использованием AddX ()

При регистрации служб внутри ConfigureServices порядок, в котором вы вызываете методы AddX(), обычно не имеет значения.Таким образом, вы можете заказать и логически сгруппировать их наиболее удобным для вас способом.

Единственный способ, которым заказ на самом деле имеет значение, если существует несколько регистраций служб одного типа, и в этом случае последняя регистрация будетвыиграть.Части каркаса по умолчанию обычно не создаются таким образом.Вместо этого они фактически созданы таким образом, что их можно вызывать несколько раз без проблем.Это особенно полезно, когда вы хотите перенастроить определенные сервисы позже.

Для AddMvc() и AddCors() оба метода зарегистрируют отдельный набор сервисов, поэтому при вызове одного из них раньше, чемпрочее.

Обратите внимание, что ни AddMvc(), ни AddCors() фактически не устанавливают никакого промежуточного программного обеспечения.Они просто готовят необходимые сервисы, которые нужны промежуточному программному обеспечению для работы.Промежуточное программное обеспечение настраивается в методе Configure.

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

Промежуточное программное обеспечение настраивается в Configure, и есть порядок, в котором вызарегистрировать каждое промежуточное ПО имеет значение .

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

Middleware pipeline

В порядкечтобы одно промежуточное программное обеспечение влияло на другое промежуточное программное обеспечение, оно должно работать на этом другом промежуточном программном обеспечении.Так что в вашем случае, поскольку вы хотите включить CORS для промежуточного программного обеспечения MVC, чтобы вы могли правильно запрашивать маршруты в MVC из других источников, вам необходимо зарегистрировать промежуточное программное обеспечение CORS до промежуточного программного обеспечения MVC.

Вы также можете взглянуть на реализацию промежуточного программного обеспечения CORS .Как вы можете видеть, вызов next() находится в самом конце, так что это означает, что соответствующая логика промежуточного программного обеспечения CORS запускается до того, как оно выполнит следующее промежуточное программное обеспечение.Это хороший признак того, что он должен запускаться первым.

Итак, правильный порядок:

app.UseCors();
app.UseMvc();

Как правило, промежуточное ПО MVC почти всегда должно быть последним.

3 голосов
/ 16 апреля 2019

Нет, все наоборот.Сначала вы должны добавить промежуточное программное обеспечение CORS, прежде чем добавлять промежуточное программное обеспечение MVC, как показано ниже.Пример взят из Включить запросы перекрестного происхождения (CORS) в ASP.NET Core

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(options =>
    {
        options.AddPolicy(MyAllowSpecificOrigins,
        builder =>
        {
            builder.WithOrigins("http://example.com",
                                "http://www.contoso.com");
        });
    });

    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
} 

То же самое происходит при его использовании

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseCors(MyAllowSpecificOrigins); 
    app.UseMvc();
}

Если вы прочиталиВ связанной документации четко сказано, что

Примечание:

UseCors необходимо вызвать до UseMvc.

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