我正在尝试从Blazor客户端应用程序调用Web API。该API发送必需的CORS标头,并且在我使用纯Javascript调用该API时可以正常工作。
进行调用时,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
。
答案 0 :(得分:0)
这不是真正的答案...我只需要空间
如上所述,设置requestMessage.Properties,提供 值“ 2”不是RequestCredentials类型的有效枚举值
如果是这样,我建议的另一种方法出了什么问题,我猜这是可行的。
偶然地,
提供的值“ 2”不是类型有效的枚举值 RequestCredentials
与Blazor无关,对吗? Blazor中没有此类类型(RequestCredentials)。也许无论您的代码是什么,它都会获取FetchCredentialsOption.Include的数字值,而不是其Enum字符串
考虑实例化HttpRequestMessage对象,然后根据需要进行配置。
希望这对您有帮助...