Thay vì modding mã tự động tạo ra hoặc gói mỗi cuộc gọi trong mã trùng lặp, bạn có thể tiêm header HTTP tùy chỉnh của bạn bằng cách thêm một thanh tra viên thông báo tùy chỉnh, nó dễ dàng hơn so với âm thanh:
public class CustomMessageInspector : IClientMessageInspector
{
readonly string _authToken;
public CustomMessageInspector(string authToken)
{
_authToken = authToken;
}
public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
var reqMsgProperty = new HttpRequestMessageProperty();
reqMsgProperty.Headers.Add("Auth-Token", _authToken);
request.Properties[HttpRequestMessageProperty.Name] = reqMsgProperty;
return null;
}
public void AfterReceiveReply(ref Message reply, object correlationState)
{ }
}
public class CustomAuthenticationBehaviour : IEndpointBehavior
{
readonly string _authToken;
public CustomAuthenticationBehaviour (string authToken)
{
_authToken = authToken;
}
public void Validate(ServiceEndpoint endpoint)
{ }
public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
{ }
public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
{ }
public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
{
clientRuntime.ClientMessageInspectors.Add(new CustomMessageInspector(_authToken));
}
}
Và khi instantiating lớp khách hàng của bạn, bạn có thể chỉ cần thêm nó dưới dạng hành vi:
this.Endpoint.EndpointBehaviors.Add(new CustomAuthenticationBehaviour("Auth Token"));
Điều này sẽ làm cho mọi cuộc gọi dịch vụ đi có tiêu đề HTTP tùy chỉnh của bạn.
Nguồn
2017-03-06 01:55:38
"Bạn không thể thêm tiêu đề HTTP sử dụng visual studio proxy tạo ra" đây có phải là vẫn còn trường hợp? – chaostheory
Tôi có thể thêm các tiêu đề như thế này nhưng làm cách nào để đưa chúng trở lại trong Dịch vụ WCF? – Joshy