Как избежать перенаправлений с http на https при размещении веб-приложения azure - PullRequest
0 голосов
/ 16 марта 2020

В настоящее время я пытаюсь создать базовый API. NET, размещенный в веб-приложении azure, и пытаюсь получить поддержку http (незащищенных) вызовов API. Моя причина в том, что я хочу иметь возможность переадресовывать свои вызовы API с устройства IoT на API, и поэтому сейчас необходимо, чтобы устройство выполняло незащищенные передачи. В настоящее время всякий раз, когда устройство вызывает определенную функцию API c в веб-приложении, оно получает код ошибки перенаправления 302 с URL-адресом варианта https того же запроса API, указанного в ответе. Код устройства не может быть изменен для обработки перенаправлений, поэтому мой единственный вариант - обработать перенаправление на стороне API.

Я смог решить эту проблему локально на моей машине с помощью проекта, который я создал (c#. net ядро ​​3.1). Я закомментировал код в файле Startup.cs, который связан с перенаправлениями https (например, функцией UseHttpsRedirection ()), а также временно отключил SSL в моей локальной сборке. Кроме того, я удалил ссылки на схемы https в моем файле launchSettings. json. Я также использую Swagger для документирования своего API, и есть код, связанный с Swagger, который выполняет перенаправления, хотя этот код в основном предназначен только для обработки пустых путей и перенаправления их в документацию Swagger, и я могу добиться того, чего хочу локально с этим нетронутым кодом.

Однако, как только я опубликовал sh мой проект в своем веб-приложении на azure, все сделанные мной изменения, кажется, ничего не достигли sh, поскольку я все еще получаю 302 ошибки перенаправления при выполнении указанных c запросов в моем API. Я удостоверился, что в настройках отключено «Только HTTPS», но, похоже, это ничего не меняет.

Большинство из того, что я мог найти в inte rnet по этому вопросу, похоже делать противоположное тому, что я пытаюсь сделать sh. Я нашел эту ссылку, которая, кажется, похожа на проблему, с которой я сталкиваюсь: Как отключить перенаправление 302 на Azure Веб-сайтах . Тем не менее, моя проблема не отображается в браузере, так как запросы http выполняются через устройство IoT. Я также проверил мой API через почтальон, просто чтобы убедиться, что это не само устройство работает, но почтальон, кажется, дает те же результаты (например, коды ошибок перенаправления).

Для справки, вот мой startup.cs file:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllersWithViews();

        //Add the database context for the api
        services.AddDbContext<Pulsalink_DEVContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("xxx")));

        // Register the Swagger services
        services.AddSwaggerDocument(config =>
        {
            //generate a header description for the api web page
            config.PostProcess = document =>
            {
                document.Info.Version = "v1";
                document.Info.Title = "xxx";
                document.Info.Description = "A simple ASP.NET Core web API";
                document.Info.TermsOfService = "None";
                document.Info.Contact = new NSwag.OpenApiContact
                {
                    Name = "xxx",
                    Email = "xxx",
                    Url = string.Empty
                };
                document.Info.License = new NSwag.OpenApiLicense
                {
                    Name = "Use under LICX",
                    Url = "https://example.com/license"
                };
            };
        });
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        // Register the Swagger generator and the Swagger UI middlewares
        app.UseOpenApi();
        app.UseSwaggerUi3();

        //app.UseHttpsRedirection();

        app.UseRouting();

        //Add our custom redirect for path-less urls
        var options = new RewriteOptions();
        options.AddRedirectToSwagger();
        //options.AddRedirectToHttps();
        app.UseRewriter(options);

        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });
    }
}

И мой запускНастройки. json:

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:61195",
      "sslPort": 0
    }
  },
  "$schema": "http://json.schemastore.org/launchsettings.json",
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "swagger",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "ActualAPIToRun": {
      "commandName": "Project",
      "launchBrowser": true,
      "launchUrl": "weatherforecast",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "http://localhost:5000"
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...