我已经向Azure App Service发布了asp.net core 2.2 API。在上次发布之后,我已经开始从前端Web应用程序获取PUT方法请求的404响应,但一切仍然可以使用邮递员或卷曲请求。
这是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
将https://stackoverflow.com/a/46200400/11324810标记添加到web.config,但它没有解决问题。
代码甚至不暗示这样的回应:
[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
通过Postman的200回应:https://i.stack.imgur.com/prI09.png
通过curl响应200:https://i.stack.imgur.com/1PHe7.png
它适用于邮递员,因为这是一个扩展,它只是发送请求。另一方面,当从浏览器发送时,出于安全原因,请求的发送方式不同。
首先,浏览器向您的web api发送OPTIONS请求。这是为了确定使用这些参数发送请求是否可以接受。
您的后端应该处理请求,响应并设置响应标头,如:
•Access-Control-Allow-Origin
•访问控制允许标头
•Access-Control-Allow-Credentials
•访问控制允许方法
•
请确保您已在API中启用了CORS。
之后,根据OPTIONS响应的标题,浏览器会将PUT发送到http://YourAPIEndPoint,如果允许一切,如原点,方法等。
您实际上可以从邮递员界面生成代码片段,以查看是否缺少任何标题
它看起来像这样
试试看它是否有帮助。