Тело запроса зашифровано - PullRequest
0 голосов
/ 17 февраля 2019

Я пытаюсь получить JSON-запрос от мобильного приложения на свой сайт, используя следующий код:

[HttpPost]
[Route("{platform:minlength(2)}/{leagueID:int}/leagueteams")]
public IActionResult ExportLeagueTeams([FromRoute] string platform, 
[FromRoute] int leagueID)
{

    if (!string.IsNullOrEmpty(this.logFile))
    {
        try
        {
            using (StreamWriter writer = new StreamWriter(this.logFile, true))
            {
                writer.WriteLineAsync("***").Wait();
                writer.WriteLineAsync("Testing this log").Wait();
                writer.WriteLineAsync("Platform: " + platform).Wait();
                writer.WriteLineAsync("LeagueID: " + leagueID).Wait();
                writer.WriteLineAsync("HEADERS:").Wait();

                // Get the headers
                foreach (var header in Request.Headers)
                {
                    writer.WriteLineAsync(header.Key + ": " + header.Value).Wait();
                }

                writer.WriteLineAsync("BODY (raw):").Wait();

                // get the Body of the request
                using (var reader = new StreamReader(Request.Body))
                {
                    var body = reader.ReadToEnd();
                    writer.WriteLineAsync(body).Wait();
                }
            }

            return Ok();
        }
        catch (Exception e)
        {
            return BadRequest();
        }
    }
    else
    {
        return BadRequest();
    }
}

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

ТЕЛО: �

Заголовки запроса следующие:

HEADERS:
Connection: Keep-Alive
Content-Type: application/json
Content-Encoding: gzip
Accept: application/json
Host: mywebsite.azurewebsites.net
Max-Forwards: 10
User-Agent: ProtoHttp 1.3/DS 15.1.2.2.0 (Android)
Content-Length: 1811
X-WAWS-Unencoded-URL: /api/Madden/ps4/6909313/leagueteams
CLIENT-IP: 73.13.26.24:47529
X-ARR-LOG-ID: 425fb24e-aa9f-4422-9dd2-b3b407240453
DISGUISED-HOST: mywebsite.azurewebsites.net
X-SITE-DEPLOYMENT-ID: mysebsite
WAS-DEFAULT-HOSTNAME: mywebsite.azurewebsites.net
X-Original-URL: /api/Madden/ps4/6909313/leagueteams
X-Forwarded-For: 73.13.26.24:47529
X-ARR-SSL: 2048|256|C=US, S=Washington, L=Redmond, O=Microsoft Corporation, OU=Microsoft IT, CN=Microsoft IT TLS CA 4|CN=*.azurewebsites.net
X-Forwarded-Proto: https
MS-ASPNETCORE-TOKEN: 8c86c695-eec2-4328-a7ed-b2c2f10b9603
X-Original-For: 127.0.0.1:56457
X-Original-Proto: http

Как я могу декодировать / расшифровать тело запроса?

1 Ответ

0 голосов
/ 17 февраля 2019

Я смог это сделать!Файл был сжат сжатым.

Используя Anemonis.AspNetCore.RequestDecompression , я смог добавить следующее в мой Startup.cs код

ConfigureServices код

/// <summary>
/// This method gets called by the runtime. Use this method to add services to the container.
/// </summary>
/// <param name="services">Services to include</param>
public void ConfigureServices(IServiceCollection services)
{
    services.Configure<CookiePolicyOptions>(options =>
    {
        // This lambda determines whether user consent for non-essential cookies is needed for a given request.
        options.CheckConsentNeeded = context => true;
        options.MinimumSameSitePolicy = SameSiteMode.None;
    });

    // Add Decompression options
    var decompressOptions = new RequestDecompressionOptions();
    decompressOptions.UseDefaults();
    decompressOptions.AddProvider<GzipDecompressionProvider>();
    decompressOptions.SkipUnsupportedEncodings = false;
    services.AddRequestDecompression(decompressOptions);

    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

    var connection = Configuration.GetConnectionString("MySiteUsers");
    var mailingListConnection = Configuration.GetConnectionString("MailingList");
    services.AddDbContext<MySiteContext>(options => options.UseSqlServer(connection));
    services.AddDbContext<MySiteMailingListContext>(options => options.UseSqlServer(mailingListConnection));
}

Configure Код

/// <summary>
/// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
/// </summary>
/// <param name="app"></param>
/// <param name="env"></param>
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
        app.UseHsts();
    }

    // This is where you use the Request Decompression
    app.UseRequestDecompression();
    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseCookiePolicy();

    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "areas",
            template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
        );
    });
}

Большое спасибо @IanKemp за толчок в правильном направлении

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