Предполагается, что вы уже правильно применили DelegateHandler к конвейеру запросов.
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MessageHandlers.Add(new MessageHandler2());
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
Наиболее вероятно, что включение функции CORS мешало заголовкам Http, добавленным из внешнего интерфейса. При условии, что вы просто проверяете ошибку на стороне сервера, попробуйте проверить ошибку на стороне клиента, отображаемую в браузере. Это может быть ошибка ниже:
Имя пользователя поля заголовка запроса не разрешено Access-Control-Allow-Headers в предварительном ответе.
Возьмите модуль IIS CORS ( расширение для решения проблемы CORS в IIS) в качестве примера. После установки IIS CORS нам нужно добавить некоторые исключения:
<system.webServer>
<cors enabled="true">
<add origin="*">
<allowHeaders allowAllRequestedHeaders="true" />
</add>
</cors>
Тогда Http Headers
работает правильно.
App.component.ts
export class AppComponent {
title = 'my angular';
data='';
private url="https://vabqia593vm:8734/api/values"
constructor(
private http: HttpClient
){
}
getData():Observable<string>{
return this.http.get<string>(this.url,{responseType:'json'});
}
ngOnInit(){
let myheaders = new HttpHeaders({'username':"Abraham", 'Password':"123456"});
this.http.get(this.url, {headers:myheaders,responseType:"text"}).subscribe((res:any)=>{
console.log(res);
this.data=res;
})
}
}
MessageHandler.
public class MessageHandler2 : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request, CancellationToken cancellationToken)
{
StringBuilder sb = new StringBuilder();
foreach (var item in request.Headers)
{
sb.Append(item.Key.ToString()+" : "+item.Value.FirstOrDefault()+"\n");
}
// Create the response.
var response = new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new StringContent(sb.ToString())
};
var tsc = new TaskCompletionSource<HttpResponseMessage>();
tsc.SetResult(response); // Also sets the task state to "RanToCompletion"
return tsc.Task;
}
}
Не стесняйтесь, позвольте мне узнать, существует ли проблема.