Получение различных ответов от .net core api, опубликованных в службе приложений Azure, через интерфейсное приложение и postman / curl - PullRequest
0 голосов
/ 07 апреля 2019

Я опубликовал asp.net core 2.2 API для службы приложений Azure. После последней публикации я получил 404 ответ на запрос метода PUT из интерфейсного веб-приложения, но все по-прежнему в порядке, когда выполняется запрос с использованием почтальона или curl.

Вот web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="dotnet" arguments=".\Api.dll" stdoutLogEnabled="true" stdoutLogFile="\\?\%home%\LogFiles\stdout" />
    </system.webServer>
    <httpErrors existingResponse="PassThrough" />
</location>

Я добавил тег httpErrors в web.config на основе этого ответа https://stackoverflow.com/a/46200400/11324810,, но это не решило проблему.

Код даже не предполагает такой ответ:

[HttpPut("google-spreadsheet/sheet-header")]
public async Task<IActionResult> UpdateHeaders([FromBody]UpdateHeadersRequest request)
{
    try
    {
        var provider = await GoogleSheetExporter.CreateSheetProvider(request.SheetUrl, request.UserEmail);
        await provider.UpdateHeadersAndRecordsAsync(request.PresentCandidates.ToList(),
            request.PreviousHeaders, request.NewHeaders);
        return Ok();
    }
    catch (Exception ex)
    {
        return StatusCode(500, $"{ex.Message} | {ex.StackTrace}");
    }
}

Screeenshots с разными ответами:

404 ответ через интерфейсное веб-приложение: https://i.stack.imgur.com/sEb2H.png

200 ответ почтальоном: https://i.stack.imgur.com/prI09.png

200 ответ через curl: https://i.stack.imgur.com/1PHe7.png

1 Ответ

0 голосов
/ 08 апреля 2019

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

Сначала браузер отправляет запрос OPTIONS на ваш веб-интерфейс. Это делается для того, чтобы определить, допустимо ли отправить запрос с этими параметрами.

Ваш бэкэнд должен обрабатывать запрос, отвечать и устанавливать заголовки ответа, такие как:

• Access-Control-Allow-Origin

• Access-Control-Allow-Headers

• Access-Control-Allow-Credentials

• Методы контроля доступа-разрешения

Пожалуйста, убедитесь, что вы включили CORS в API.

После этого, основываясь на заголовках ответа OPTIONS, браузер отправит PUT на http://YourAPIEndPoint ЕСЛИ все разрешено, например, происхождение, метод и т. Д.

На самом деле вы можете сгенерировать фрагмент кода из интерфейса вашего почтальона, чтобы проверить, не пропущен ли заголовок

enter image description here

Это будет выглядеть примерно так

enter image description here

Попробуйте и посмотрите, поможет ли это.

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