【发布时间】:2019-12-10 12:15:03
【问题描述】:
我正在尝试从 Blazor 客户端应用程序调用 Web API。当我使用纯 Javascript 调用 API 时,API 发送所需的 CORS 标头并且工作正常。
API 需要在调用时包含 Auth cookie,因此我可以使用 JavaScript 调用:
fetch(uri, { credentials: 'include' })
.then(response => response.json())
.then(data => { console.log(data) })
.catch(error => console.log('Failed'));
现在,我正尝试在 Blazor 上做同样的事情。我在文档上遇到了this section,上面写着:
requestMessage.Properties[WebAssemblyHttpMessageHandler.FetchArgs] = new
{
credentials = FetchCredentialsOption.Include
};
当我现在拨打电话时,它会失败并出现以下异常:
WASM:System.Net.Http.HttpRequestException:TypeError:无法在“Window”上执行“fetch”:提供的值“2”不是 RequestCredentials 类型的有效枚举值。
我注意到在 Statrup.cs 上添加以下内容允许我调用包括凭据 (here) 在内的 API:
if (RuntimeInformation.IsOSPlatform(OSPlatform.Create("WEBASSEMBLY")))
{
WebAssemblyHttpMessageHandler.DefaultCredentials = FetchCredentialsOption.Include;
}
现在,我想使用 AutoRest 生成的 API 客户端调用 API,这样我就可以重用现有的客户端并节省大量时间。如上所述设置DefaultCredentials 不起作用并显示以下异常:
WASM:Microsoft.Rest.HttpOperationException:操作返回无效状态代码“InternalServerError”
如上设置requestMessage.Properties,说
提供的值“2”不是 RequestCredentials` 类型的有效枚举值。
我已经使用 this technique 从 Blazor 注入 HttpClient。
【问题讨论】:
-
我意识到我的 HttpClient 初始化错误。 Fiddler 拯救了这一天!
标签: asp.net-core cors blazor