如何使用AutoRest客户端通过身份验证从Blazor客户端应用程序进行CORS API调用?

时间:2019-08-01 20:50:35

标签: asp.net-core cors blazor

我正在尝试从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

1 个答案:

答案 0 :(得分:0)

这不是真正的答案...我只需要空间

  

如上所述,设置requestMessage.Properties,提供   值“ 2”不是RequestCredentials类型的有效枚举值

如果是这样,我建议的另一种方法出了什么问题,我猜这是可行的。

偶然地,

  

提供的值“ 2”不是类型有效的枚举值   RequestCredentials

与Blazor无关,对吗? Blazor中没有此类类型(RequestCredentials)。也许无论您的代码是什么,它都会获取FetchCredentialsOption.Include的数字值,而不是其Enum字符串

考虑实例化HttpRequestMessage对象,然后根据需要进行配置。

希望这对您有帮助...