首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >启动头一次并发送每个HTTP请求

启动头一次并发送每个HTTP请求
EN

Stack Overflow用户
提问于 2019-12-02 09:44:12
回答 2查看 461关注 0票数 0

我正在使用一个服务来获取HTML中的用户it,它工作得很好。这里使用Angular服务获取用户详细信息,并用于后端ASP.NET Web Api。到目前为止,这是我迄今为止所做的:

Web C#

代码语言:javascript
运行
AI代码解释
复制
[Route("api/values/GetUserInfo")]
[Authorize]
[HttpGet]
public List<User> GetUserInfo(string type)
{
   List<User> lst = null;

   if (type!= null)
   {
       lst = GetUserInfo().Where(c => c.userType== type).ToList();
   }
   else
   {
       lst = GetUserInfo().ToList();
   }

   return lst;
}

角:服务- UserService

代码语言:javascript
运行
AI代码解释
复制
GetUserInfo(dept: string) {
   debugger;

   this.Url = 'http://localhost:53743/api/values/';
   var a = this.Url + 'GetUserInfo';

   var headers_object = new HttpHeaders().set("Authorization", "Bearer " + localStorage.getItem('Token')); //Set JWT Token 

   let params = new HttpParams().set("type", type);

   return this.http.get<any>(a, { headers: headers_object, params: params }); //Get request to retrieve the user details from database server
}

最后在角分量

代码语言:javascript
运行
AI代码解释
复制
public empIds: any[];

constructor(private dataservice: UserService, private appComponent: AppComponent, private sanitizer: DomSanitizer, private route: Router, private http: HttpClient) { //UserService injected in the constructor

}

ngOnInit() {
   this.LoadUserData('');
}

LoadUserData(dept: string) {
   debugger;
   this.dataservice.GetUserInfo(dept).subscribe(result => { //Calling the `Angular` service here
   this.empIds = result; //Keeping the result set here
  }, error => console.error(error));
}

到目前为止,这些都是我已经完成的工作,我想知道我是否能够在每个HTTP请求中管理启动一次的头。就像一个处理所有帖子并得到请求的类,我对它做了一些研究,搜索眼罩,但有点困惑,我怎么能使它相应地工作呢?下面是我迄今为止一直在学习并试图在代码示例中实现的内容。但是问题是,当有参数时,我可以使用下面的代码示例来处理它们。

角- httpService

代码语言:javascript
运行
AI代码解释
复制
import { Injectable } from '@angular/core';
import { Http, Headers } from '@angular/http';
import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';

@Injectable({
  providedIn: 'root'
})

export class HttpClientService { 

  value: any;

  constructor(private http: HttpClient) { }
  createAuthorizationHeader(headers: HttpHeaders) {
    //headers.append('content-type', 'application/json');
    //headers.append("Authorization", "Bearer " + localStorage.getItem('Token'));
  }

  get(url, value, type) {
    debugger;
    let params = new HttpParams().set("dept", dept);
    var headers_object = new HttpHeaders().set("Authorization", "Bearer " + value);

    const httpOptions = {
      headers: headers_object
    };

    return this.http.get<any>(url, {
      headers: headers_object, params: params
    });
  }

  post(url, data, value) {
    let params = new HttpParams();
    let headers_object = new HttpHeaders();
    headers_object.append('content-type', 'application/json');
    headers_object.append("Authorization", "Bearer " + value);

    //this.createAuthorizationHeader(headers);
    return this.http.post<any>(url, data, {
      headers: headers_object, params: params
    });
  }
}

以下是组件中的一个示例:

代码语言:javascript
运行
AI代码解释
复制
this.httpService.get(a, localStorage.getItem('Token'), dept).subscribe(result => {
    this.empIds = result;
}, error => console.error(error)); 

N.B.:我对Angular几乎是新手,它的工作流程,试图用更好的方式解决问题--谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-02 09:54:43

您应该使用interceptor

如果您想在每个请求中添加特定的标头,您必须这样做:(这里,我在每个http请求中添加接受标头)

代码语言:javascript
运行
AI代码解释
复制
@Injectable()
export class ExampleAuth implements HttpInterceptor {

  intercept(request: HttpRequest<any>, next: HttpHandler):
    Observable<HttpEvent<any>> {

    request = request.clone({ headers: request.headers.set('Accept', 'application/json') }); // Here you can add your special headers 

    return next.handle(request);
  }

}

然后将拦截器添加到应用程序模块的提供程序部分,如下所示:

代码语言:javascript
运行
AI代码解释
复制
@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    HttpClientModule
  ],
  providers: [
    { provide: HTTP_INTERCEPTORS, useClass: ExampleAuth, multi: true }
  ],
  bootstrap: [AppComponent]
})
export class AppModule { }

现在,每当发出新的HTTP请求时,该拦截器将修改请求的头。

更多解释:

角度拦截器是一个强大的特性,它可以以多种方式用于保护和处理许多与HTTP相关的现象。

我们能用拦截器做什么?

在应用程序中,可以通过多种方式使用拦截器。

-在HTTP调用中设置请求头,如Content或发送任何自定义标头。

-通过设置安全令牌来验证HTTP调用

-显示自旋加载器/进度条,因为HTTPS调用正在进行中。

-在一个地方处理HTTP调用中的错误

-使用通知/演讲会显示响应消息

编辑:

根据您的示例,在您的HttpClientService中,您必须删除以下行,因为它们将自动添加到拦截器中的http请求头中:

代码语言:javascript
运行
AI代码解释
复制
var headers_object = new HttpHeaders().set("Authorization", "Bearer " + value);
 headers_object.append('content-type', 'application/json');

修改您的HttpClientService如下:

代码语言:javascript
运行
AI代码解释
复制
import { Injectable } from '@angular/core';
import { Http, Headers } from '@angular/http';
import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';

@Injectable({
  providedIn: 'root'
})

export class HttpClientService { 
  value: any;

  constructor(private http: HttpClient) { }

  get(url, value, type) {
    debugger;
    let params = new HttpParams().set("dept", dept);

    const options = {
      params: params
    };
    return this.http.get<any>(url, options);
  }

  post(url, data, value) {
    let params = new HttpParams();
    const options = {
      params: params
    };
    return this.http.post<any>(url, data, options);
  }
}

然后,在拦截器中,我们必须添加刚刚从HttpClientService中删除的头

代码语言:javascript
运行
AI代码解释
复制
@Injectable()
export class ExampleAuth implements HttpInterceptor {

  intercept(request: HttpRequest<any>, next: HttpHandler):
    Observable<HttpEvent<any>> {

    request = request.clone({ headers: request.headers.set('content-type', 'application/json') }); 
    request = request.clone({ headers: request.headers.set("Authorization", "Bearer " + localStorage.getItem('Token') ) });

    return next.handle(request);
  }

}

然后在app模块中注册拦截器。

票数 2
EN

Stack Overflow用户

发布于 2019-12-02 09:52:11

您可以使用HttpInterceptor来完成它,它可以拦截您提出的所有请求以及它们的所有响应。

因此,您还可以使用它在每个失败请求上显示一致的错误消息。

您可以查看角文献以了解如何实现它。

这个示例非常类似于您需要的内容:

代码语言:javascript
运行
AI代码解释
复制
import { AuthService } from '../auth.service';

@Injectable()
export class AuthInterceptor implements HttpInterceptor {

  constructor(private auth: AuthService) {}

  intercept(req: HttpRequest<any>, next: HttpHandler) {
    // Get the auth token from the service.
    const authToken = this.auth.getAuthorizationToken();

    // Clone the request and replace the original headers with
    // cloned headers, updated with the authorization.
    const authReq = req.clone({
      headers: req.headers.set('Authorization', authToken)
    });

    // send cloned request with header to the next handler.
    return next.handle(authReq);
  }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59144143

复制
相关文章
Linux 中杀死指定端口的进程
这个的含义是:我们之前看到了那张图,发现 PID 在第七列,所以我们指定选择只打印第七列的数据。
wsuo
2020/07/30
14.5K0
Linux 中杀死指定端口的进程
Linux 中杀死指定端口的进程
1、netstat -nlp | grep :8083 | awk '{print $7}' 2、kill + 得到的PID
院长技术
2020/11/10
2.9K0
Windows中杀死占用某个端口的进程
最近在写Java web的项目的时候,总是会出现Tomcat端口被占用的问题,这是因为Tomcat的8080端口在启动之后代码缺陷忘记停止进程,导致后面想再次启动时可能会出现端口被占用的bug,那么怎么去解决这一bug呢?
小颜同学
2023/08/21
5630
干货:如何正确地学习数据科学中的 python
大多数有抱负的数据科学家是通过学习为开发人员开设的编程课程开始认识 python 的,他们也开始解决类似 leetcode 网站上的 python 编程难题。他们认为在开始使用 python 分析数据之前,必须熟悉编程概念。
AI研习社
2019/08/15
1.2K0
干货:如何正确地学习数据科学中的 python
Windows中杀死占用某个端口的进程[通俗易懂]
从网上找了好久,尝试之后,发现不行。开始自己尝试,终于,成功的将占用端口的进程杀掉。在此记录下过程(以8081端口为例):
全栈程序员站长
2022/09/09
2.5K0
Windows中杀死占用某个端口的进程[通俗易懂]
干货:如何正确地学习数据科学中的Python
大多数有抱负的数据科学家是通过学习为开发人员开设的编程课程开始认识 python 的,他们也开始解决类似 leetcode 网站上的 python 编程难题。他们认为在开始使用 python 分析数据之前,必须熟悉编程概念。
一墨编程学习
2019/08/07
1.5K0
干货:如何正确地学习数据科学中的Python
我的开发环境
最近在写第二个系列文章《Monkey Android》,目标定位Android初学者,因此不得不谈论一下他们很关心的开发环境的问题。在系列文章中我并没有设计这方面的讨论,原因是过多的纠结于开发环境会使学习的时间成本大大增加。
GitOPEN
2019/01/29
5950
Python 强制杀死运行中的多进程脚本
拉灯的小手
2023/06/20
5770
在不同的任务中,我应该选择哪种机器学习算法?
当开始研究数据科学时,我经常面临一个问题,那就是为我的特定问题选择最合适的算法。在本文中,我将尝试解释一些基本概念,并在不同的任务中使用不同类型的机器学习算法。在文章的最后,你将看到描述算法的主要特性的结构化概述。 首先,你应该区分机器学习任务的四种类型: 监督式学习 无监督学习 半监督学习 强化学习 监督式学习 监督式学习是指从有标签的训练数据中推断一个函数的任务。通过对标签训练集的拟合,我们希望找到最优的模型参数来预测其他对象(测试集)的未知标签。如果标签是一个实数,我们就把任务叫做“回归(regre
AiTechYun
2018/03/05
2.5K0
在不同的任务中,我应该选择哪种机器学习算法?
我的Python环境设置
网上看到一篇博文,我突然也想写一下自己正在使用的Python环境设置,以及对应的工具链。众众众所周知,Python环境管理是个很大很大的坑,坑里面有无数新人or老司机的尸体。而Python环境管理的工具又五花八门,所以可能每个人的设置都不尽相同。我列出的我使用的工具链,至少最大地满足了自己的需求,但不一定满足所有人的需求。但我自认为在Python环境管理方面颇有心得,所以有一定的参考价值。
岂不美哉Frost
2019/11/29
1.2K0
java杀死进程_linux杀死所有进程
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/08
4.6K0
java杀死进程_linux杀死所有进程
集群环境下的定时任务
    定时任务的实现方式有多种,例如JDK自带的Timer+TimerTask方式,Spring 3.0以后的调度任务(Scheduled Task),Quartz框架等。
动力节点Java培训
2019/06/14
2.1K0
android 杀进程 方法,android中杀死进程的方法
/****************************************************
全栈程序员站长
2022/09/28
1.7K0
Linux中查看进程、杀死进程、进入进程的命令
1.查看进程     ps命令查找与进程相关的PID号:     ps a 显示现行终端机下的所有程序,包括其他用户的程序。     ps -A 显示所有程序。     ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。     ps -e 此参数的效果和指定"A"参数相同。     ps e 列出程序时,显示每个程序所使用的环境变量。     ps f 用ASCII字符显示树状结构,表达程序间的相互关系。     ps -H 显示树状结构,表示程序间的相互关系。     ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。     ps s 采用程序信号的格式显示程序状况。     ps S 列出程序时,包括已中断的子程序资料。     ps -t<终端机编号> 指定终端机编号,并列出属于该终端机的程序的状况。     ps u 以用户为主的格式来显示程序状况。     ps x 显示所有程序,不以终端机来区分。     最常用的方法是ps aux,然后再通过管道使用grep命令过滤查找特定的进程,然后再对特定的进程进行操作。     ps aux | grep program_filter_word,ps -ef |grep tomcat  ps -ef|grep java|grep -v grep 显示出所有的java进程,去处掉当前的grep进程。  2.杀死进程    使用kill命令结束进程:kill xxx    常用:kill -9 324    Linux下还提供了一个killall命令,可以直接使用进程的名字而不是进程标识号,例如:# killall -9 NAME
菲宇
2022/12/02
13.3K0
kill命令杀死所有进程_linux 杀死进程
kill方法的缺陷是,当我们有很多进程要杀死,不可能全部一个一个手动输进程号,因此能够根据进程名称中的关键字去杀进程,这样就可以批量杀死了,如下:
全栈程序员站长
2022/11/17
11.9K0
kill命令杀死所有进程_linux 杀死进程
正确地使用 Kotlin 的 internal
Kotlin 的 internal 是一个比较有用的访问控制关键字,特别是当你开发一些 SDK 给别人用时,有些类的 API 只能为 public 却又不想让外部访问到你就会发现 internal 有多么有用了 —— 只是实际情况有点儿事与愿违,internal 关键字修饰的成员在被编译成 jar 之后,Java 仍然可以无所顾忌的访问这些成员,除了名称有些奇怪。这可怎么办。小伙伴们就炸了,于是一向特立独行的冰冰给出了自己的方案。
bennyhuo
2020/02/20
3.3K0
linux中kill,pkill和killall杀死进程
杀死命令用法 的通用语法kill command是: # kill [signal or option] PID(s) 为一个kill command一种Signal Name可能: Signal Name Signal Value Behaviour SIGHUP 1 Hangup SIGKILL 9 Kill Signal SIGTERM 15 Terminate 从上面的行为显然,SIGT
入门笔记
2022/06/02
2.4K0
杀死进程
按大写O再按k再敲回车,然后使用R就可以以cpu占用量进行查看了!下面贴出top的技巧命令:
一滴水的眼泪
2020/09/24
1.6K0
[答疑]我设计的任务状态转换,不需要任务暂停这个状态
2013-05-22 16:56:50 UML菜鸟(122*****922) 这是我设计的任务状态转换,不需要任务暂停这个状态 2013-05-22 16:59:12 UML菜鸟(122*****922) 停止任务的事件直接就是把任务线程给杀了 2013-05-22 16:59:42 UML菜鸟(122*****922) 这破网,看来下午是没法问了 2013-05-22 17:44:00 潘加宇(3504847) 把状态名称前面的"任务"都去掉 2013-05-22 17:45:02 潘加宇(3504847) 线上不对,填错地方了,应该是event[guard]/action 2013-05-22 17:45:26 潘加宇(3504847) 找本UML书看看再画 2013-05-22 17:46:23 UML菜鸟(122*****922) 把任务去掉,这个确实,但是线上,我看到处都是这样 2013-05-22 17:46:34 UML菜鸟(122*****922)
用户6288414
2021/03/16
6630
[答疑]我设计的任务状态转换,不需要任务暂停这个状态
springboot中的常用任务
比如:前端请求了一些耗时任务,一时间处理不完一直转圈圈的不到响应,体验就会十分的不好。 我们需要将收到请求在处理的结果返回给前端,处理的过程开辟线程执行,不影响用户做其他操作
冷环渊
2021/11/15
6560

相似问题

芹菜在库伯奈特斯找不到雷迪斯

15

我怎样才能在库伯奈特斯获得特定部署的时间?

10

我怎样才能在库伯奈特斯看到Livy中的executor日志?

12

在库伯奈特部署周知丹

10

在库伯奈特没有发现StorageClass

34
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档