我的IIS无法从角度获取requestHeader。我发现了类似的问题,但没有一个人有很好的答案,所以请不要表示重复的问题。
这是我的邮政编码:
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Observable } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class CustomHttpService {
constructor(private http:HttpClient) { }
get(url:string,userName:any, password:any):Observable<any>{
let headers = new HttpHeaders({'username':userName, 'Password':password});
return this.http.get('https://localhost:44345/api/'+url, {headers});
}
//other code...
}
这里是C#上的代码:
public class ResponseHandler : DelegatingHandler
{
async protected override Task<HttpResponseMessage>
SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
try
{
var b = request.Headers.GetValues("username").FirstOrDefault();
}
catch (Exception ex)
{
//handle exception...
}
try
{
var c = request.Headers.GetValues("Password").FirstOrDefault();
}
catch (Exception ex)
{
//handle exception...
}
HttpResponseMessage response = await base.SendAsync(request, cancellationToken);
return response;
}
}
在C#端出现异常-找不到标题。可能是什么问题?
假定您已经正确地将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-Header。
以IIS CORS模块(解决IIS中CORS问题的扩展)为例,安装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;
}
}
随时让我知道问题是否仍然存在。