提问人:guirms 提问时间:10/3/2023 更新时间:10/3/2023 访问量:93
没有“访问控制允许来源”CORS错误仅在使用.NET和Angular下载.PDF文件的方法中
No 'Access-Control-Allow-Origin' CORS error only in method to download .PDF file using .NET and Angular
问:
我有一个带有 .NET 7 和 Angular 16 的应用程序,我从客户端到服务器发出了很多请求,一切正常。我的问题发生在我用于下载 PDF 文件的特定方法中。此外,此错误仅发生在生产服务器中。错误说(在 chrome 控制台中):
CORS 策略阻止了从源“http://10.17.40.93:3000”对“http://10.17.40.93:5000/Report/GenerateEggResultsReport”处的 XMLHttpRequest 的访问:请求的资源上不存在“Access-Control-Allow-Origin”标头。
请求工作示例:ᅠᅠᅠᅠᅠᅠ
- 角度面:
getUserResults(startDate: string): Observable<ResponseBase> {
const params = new HttpParams()
.set('startDate', startDate);
return this.http.get<ResponseBase>(environment.apiUrl + 'Report/getUserResults',
{
params,
headers: { 'LangInfo': this.baseService.currentLanguage.enumValue }
});
}
- .NET 端
[HttpGet("GetUserResults")]
public JsonResult GetUserResults(DateTime startDate, DateTime endDate, bool isOptoClass, EShiftType? shiftType)
{
try
{
var eggResults = _machineReportAppService.GetUserResults(startDate, endDate, isOptoClass, shiftType);
return ResponseBase.StatusReturn(EReturnStatus.Success, eggResults);
}
catch (Exception ex)
{
var returnStatus = ex.Message == Translator.Translate("NoMachineOperationFound") ? EReturnStatus.CleanLoadedData : EReturnStatus.Error;
var returnMessage = !ex.Message.IsNullOrEmpty() ? ex.Message : Translator.Translate("ErrorGettingEggResults");
return ResponseBase.StatusReturn(returnStatus, returnMessage);
}
}
不起作用的请求示例:
- 角度面:
generateReportFile(eggResultsReportFileRequest: EggResultsReportFileRequest): Observable<HttpResponse<Blob>> {
return this.http.post<Blob>(environment.apiUrl + 'Report/GenerateEggResultsReportFile', eggResultsReportFileRequest, {
observe: 'response',
responseType: 'blob' as 'json',
headers: {
'Access-Control-Allow-Origin': '*',
'LangInfo': this.baseService.currentLanguage.enumValue
}
});
}
- .NET 端:
[HttpPost("GenerateEggResultsReportFile")]
public IActionResult GenerateEggResultsReportFile(EggResultsReportFileRequest eggResultsReportFileRequest)
{
try
{
CreateLog(eggResultsReportFileRequest);
var eggResultsReport = _machineReportAppService.GenerateEggResultsReportFile(eggResultsReportFileRequest);
return File(eggResultsReport.ReportContent, eggResultsReport.ReportExtension);
}
catch
{
throw new InvalidOperationException(Translator.Translate("ErrorGeneratingReport"));
}
}
答:
2赞
Bredo
10/3/2023
#1
我看到您的示例之间的主要区别在于,一个是 GET 请求,另一个是 POST 请求。 GET 和 POST 请求的 CORS 策略不同。
也许这个答案可能会有所帮助:https://stackoverflow.com/a/64714974/11905918
评论