我正在使用Azure API
,URL 低于错误请帮助解决这个问题。请分享代码片段,如何更改web.config
和端点。
HTTP 请求未经客户端身份验证方案“匿名”授权。从服务器收到的身份验证标头是“AzureApiManagementKey realm="https:/azure.azure-api.net/MethodName",name="Ocp-Apim-Subscription-Key",type="header"'。
我正在使用Azure API
,URL 低于错误请帮助解决这个问题。请分享代码片段,如何更改web.config
和端点。
HTTP 请求未经客户端身份验证方案“匿名”授权。从服务器收到的身份验证标头是“AzureApiManagementKey realm="https:/azure.azure-api.net/MethodName",name="Ocp-Apim-Subscription-Key",type="header"'。
我知道这仍然是一个非常古老的问题,我的回答会帮助面临同样问题的人。
解决方案是创建自定义端点行为,您可以在其中将自定义消息处理程序添加到绑定参数。
在自定义消息处理程序中,请添加您的请求标头。在此之后,使用安全模式为“Transport”和 MessageEncoding 为“Text”的任何绑定技术(如 basichttpsbinding 或 NetHttpsBinding)来创建soap客户端对象。将自定义端点行为添加到 soap 客户端。
public class CustomEndpointBehavior : IEndpointBehavior
{
public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
{
bindingParameters.Add(new Func<HttpClientHandler, HttpMessageHandler>(x =>
{
return new CustomMessageHandler(x);
}));
}
public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime) { }
public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher) { }
public void Validate(ServiceEndpoint endpoint) { }
}
public class CustomMessageHandler : DelegatingHandler
{
public CustomMessageHandler(HttpClientHandler handler)
{
InnerHandler = handler;
}
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
{
request.Headers.Add("xxxx", "abcde");
return base.SendAsync(request, cancellationToken);
}
}
使用服务的控制台应用程序。
static async Task Main(string[] args)
{
var client = GetSOAPClient();
try
{
var result = await client.MyOperation().ConfigureAwait(false);
if(result.Body != null && result.Body.status == "Success")
{
Console.WriteLine(result.Body.myValue);
}
}
catch (Exception ex)
{
Console.WriteLine(ex?.Message);
}
Console.ReadKey();
}
static MyServiceClient GetSOAPClient()
{
NetHttpsBinding binding = new NetHttpsBinding();
binding.Security.Mode = BasicHttpsSecurityMode.Transport;
binding.MessageEncoding = NetHttpMessageEncoding.Text;
EndpointAddress ea = new EndpointAddress(new Uri("https://myazureurl"));
var client = new MyServiceClient(binding, ea);
client.Endpoint.EndpointBehaviors.Add(new CustomEndpointBehavior());
return client;
}
}
这是抱怨您的订阅密钥错误。如果您检查响应正文,它将为您提供有关真正问题所在的可读消息。仔细检查您是否为 Azure API 访问输入了正确的订阅密钥。
您可以从个人资料菜单下的 Developer Portal 获得订阅密钥。您可以在“从开发人员门户调用操作”部分下查看本文中使用的订阅密钥示例:https ://docs.microsoft.com/en-us/azure/api-management/api-management -开始
此外,“HTTP 请求未经客户端身份验证方案‘匿名’授权。” 信息的一部分是红鲱鱼和响应如何工作的一个单独问题。