我已将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
答案 0 :(得分:0)
它在邮递员中工作,因为它是扩展名,它只是发送请求。 另一方面,出于安全原因,从浏览器发送时,请求的发送方式有所不同。
首先,浏览器向您的webapi发送一个OPTIONS请求。这是为了确定使用这些参数发送请求是否可接受。
您的后端应处理请求,响应并设置响应标头,例如:
•访问控制允许来源
•访问控制允许标题
•访问控制允许凭据
•访问控制允许方法
•
请确保已在API中启用了CORS。
然后,基于OPTIONS响应的标头,如果允许所有内容(如来源,方法等),浏览器将把PUT发送到http://YourAPIEndPoint。
您实际上可以从邮递员界面中生成代码片段,以查看是否缺少任何标题
它看起来像这样
尝试看看是否有帮助。