通过前端应用程序和邮递员/卷曲,从Azure应用服务中发布的.net核心api获取不同的响应

时间:2019-04-07 16:03:09

标签: c# azure asp.net-core azure-web-app-service

我已将ASP.NET Core 2.2 API发布到Azure App Service。 在上次发布之后,我已经开始从前端Web应用程序获取PUT方法发出请求的404响应,但是使用邮递员或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>

我已根据此答案https://stackoverflow.com/a/46200400/11324810在Web.config中添加了httpErrors标记,但是并不能解决问题。

该代码甚至不暗示这样的响应:

[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}");
    }
}

具有不同响应的截图:

通过前端网络应用发出的404响应:https://i.stack.imgur.com/sEb2H.png

通过邮递员回复200:https://i.stack.imgur.com/prI09.png

通过curl响应200:https://i.stack.imgur.com/1PHe7.png

1 个答案:

答案 0 :(得分:0)

它在邮递员中工作,因为它是扩展名,它只是发送请求。 另一方面,出于安全原因,从浏览器发送时,请求的发送方式有所不同。

首先,浏览器向您的webapi发送一个OPTIONS请求。这是为了确定使用这些参数发送请求是否可接受。

您的后端应处理请求,响应并设置响应标头,例如:

•访问控制允许来源

•访问控制允许标题

•访问控制允许凭据

•访问控制允许方法

请确保已在API中启用了CORS。

然后,基于OPTIONS响应的标头,如果允许所有内容(如来源,方法等),浏览器将把PUT发送到http://YourAPIEndPoint

您实际上可以从邮递员界面中生成代码片段,以查看是否缺少任何标题

enter image description here

它看起来像这样

enter image description here

尝试看看是否有帮助。