IIS找不到角度请求标头

问题描述 投票:0回答:1

我的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#端出现异常-找不到标题。可能是什么问题?

angular iis request-headers
1个回答
0
投票

假定您已经正确地将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正常工作。enter image description hereApp.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;
    }
}

随时让我知道问题是否仍然存在。

© www.soinside.com 2019 - 2024. All rights reserved.