如何从Azure和b2c中的自定义策略更改rest api调用中的内容类型?



我正在尝试通过自定义策略呼叫SMS提供商。SMS提供程序提供的API接受以下格式的JSON有效负载有效载荷格式我试图通过传递JOSN有效负载来调用此API,但是当我运行此策略时,请求头中的内容类型是application/x-www-form-urlencoded,但API只接受application/json。下面是restful技术配置文件

的代码
<TechnicalProfile Id="SendOtp">
<DisplayName>Use SMS api to send the code the the user</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<Item Key="ServiceUrl">https://japi.instaalerts.zone/httpapi/JsonReceiver</Item>
<Item Key="AuthenticationType">None</Item>
<Item Key="SendClaimsIn">Body</Item>
<Item Key="ClaimUsedForRequestPayload">RequestBody</Item>
<!-- <Item Key="DefaultUserMessageIfRequestFailed">Default</Item>
<Item Key="UserMessageIfCircuitOpen">Not Reachable</Item>
<Item Key="UserMessageIfDnsResolutionFailed">DNS Failed</Item>
<Item Key="UserMessageIfRequestTimeout">Timeout</Item> -->
</Metadata>
<InputClaimsTransformations>
<InputClaimsTransformation ReferenceId="FormatOTPmsg" />
<!-- <InputClaimsTransformation ReferenceId="createDestArray" /> -->
<InputClaimsTransformation ReferenceId="RequestBody" />
</InputClaimsTransformations>
<InputClaims>
<InputClaim ClaimTypeReferenceId="RequestBody"/>
</InputClaims>
</TechnicalProfile>
问题是如何更改请求的内容类型?

您不能控制内容类型头,它应该尊重用于发送有效负载的方法。这可能是一个bug,请抛出微软支持票。

我不相信有一种方法可以在B2C自定义策略中使用RestfulProvider技术配置文件更改头的值。我们唯一可以添加的自定义头是用于身份验证的,可以在这里找到B2C Restful加密密钥。这显然不适用于这里。

我试着调用一些测试api,它记录头和B2C总是发送内容类型为'application/json;charset=utf-8'而使用元数据

<Item Key="SendClaimsIn">Body</Item>

但是使用Form代替body会产生报头'content-type': 'application/x-www-form-urlencoded'

<Item Key="SendClaimsIn">Form</Item>

我现在无法重现您的问题。这是我的测试api调用供参考。

<TechnicalProfile Id="TestEchoJson">
<DisplayName>Test Echo</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<Item Key="ServiceUrl">{Settings:TestApiUrl}</Item>
<Item Key="AuthenticationType">None</Item>
<Item Key="SendClaimsIn">Body</Item>
<Item Key="ClaimUsedForRequestPayload">emailRequestBody</Item>
</Metadata>
<InputClaimsTransformations>
<InputClaimsTransformation ReferenceId="GenerateEmailRequestBody" />
</InputClaimsTransformations>
<InputClaims>
<InputClaim ClaimTypeReferenceId="emailRequestBody" />
</InputClaims>
</TechnicalProfile>

如果问题仍然存在,您可能必须向微软提出支持票。

最新更新