首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >请求HttpClient超时

请求HttpClient超时
EN

Stack Overflow用户
提问于 2021-03-03 10:22:15
回答 2查看 500关注 0票数 0

我在TypeScript和ASP.NET Core Web API一起工作。

场景:

我正在后台使用一个大型数据响应服务。加载数据花了两分钟多时间。据我所知,HttpClient的默认超时时间是localhost (Chrome hold for request time out)的两分钟,但是当我将代码发布到IIS站点时,两分钟后它会给出一个500 Internal Server Error

API端的

我把时间设为1000秒。

代码语言:javascript
复制
 services.AddDbContext<BusinessContext>(options =>
     options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"], opts => opts.CommandTimeout(1000).EnableRetryOnFailure()));

web端的

Try 1:

这是一个简单的服务调用。

代码语言:javascript
复制
async getData(lookUp: Lookup): Promise<PacketSearchItem[]> {
    return await this.http.post(environment.apiBaseUrl + "Packet/ManualSearch", lookUp)
      .toPromise() as PacketSearchItem[];
}

尝试: 2

代码语言:javascript
复制
async getData(lookUp: Lookup): Promise<PacketSearchItem[]> {
    return await this.http.post(environment.apiBaseUrl + "Packet/ManualSearch", lookUp).pipe(timeout(10000000))
      .toPromise() as PacketSearchItem[];
}

尝试: 3

代码语言:javascript
复制
async getData(lookUp: Lookup): Promise<PacketSearchItem[]> {
    return await this.http.post(environment.apiBaseUrl + "Packet/ManualSearch", lookUp, { headers: new HttpHeaders({ timeout: `${10000000}` })}).pipe(timeout(10000000))
      .toPromise() as PacketSearchItem[];
}

谷歌的研究:

参考文献

我使用了上面的链接代码,但它给了我同样的错误,因为2分钟后,在Google中会出现请求超时。

错误截图:

1)控制台错误:

( 2.)网络错误:

我想等待Chrome从API获得响应。

我已经添加了CORS策略

代码语言:javascript
复制
 services.AddCors(options => {
     options.AddPolicy("CorsPolicy",
         builder => builder.AllowAnyOrigin()
         .AllowAnyMethod()
         .AllowAnyHeader()
         .AllowCredentials());
});

app.UseExceptionHandler(
    builder => {
        builder.Run(
            async context => {
                context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
                context.Response.Headers.Add("Access-Control-Allow-Origin", "*");

                var error = context.Features.Get<IExceptionHandlerFeature>();
                if (error != null) {
                    context.Response.Headers.Add("Application-Error", error.Error.Message);
                    // CORS
                    context.Response.Headers.Add("access-control-expose-headers", "Application-Error");

                    await context.Response.WriteAsync(error.Error.Message).ConfigureAwait(false);
                }
            });
    });
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-04 06:47:05

经过大量的研究,我找到了答案。这是ASP.NET核心配置文件中的问题:

web.config

代码语言:javascript
复制
 <aspNetCore requestTimeout="00:20:00">

我们必须增加这里的时间。

帮助链接:

参考文献

票数 0
EN

Stack Overflow用户

发布于 2021-03-03 10:47:25

根据屏幕截图,这不是一个超时问题,而是一个跨源资源共享 (CORS)问题。

您可能应该花一些时间来了解CORS和如何使用在ASP.NET内核中启用CORS

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66455089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档