You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

现有URL的WebRequest请求失效:原正常代码突然无法工作

解决异步请求PDF生成接口返回404的问题

看起来你遇到的问题是PDF生成接口因为处理耗时较长,导致请求直接返回404,但实际上接口是存在的,而且你怀疑是async/await的问题。先看看你的代码:

var request = System.Net.WebRequest.Create($"http://moachingtestweb.azurewebsites.net/FoodPlanner/Pdf?foodplanId={foodplanId}");
//var request = System.Net.WebRequest.Create($"https://application.moaching.com/FoodPlanner/Pdf?foodplanId={foodplanId}");
//TODO for prod. Add to config.
request.Method = "GET";
var response = await request.GetResponseAsync();
var stream = response.GetResponseStream();
return new FileStreamResult(stream, "application/pdf");

首先先帮你排除async/await本身的问题——你这里的写法语法上是完全正确的,await request.GetResponseAsync()确实会等待异步请求完成,不会因为异步机制没生效导致提前返回。问题大概率出在超时配置或者接口端的路由/处理逻辑上,给你几个排查方向:

  • 调整请求端超时时间:System.Net.WebRequest的默认超时可能不足以支撑PDF生成的耗时,你可以手动设置更长的超时值试试:

    request.Timeout = 300000; // 设置为5分钟,可根据实际生成时长调整
    
  • 重点排查服务器端超时配置:如果你用的是Azure Web Apps这类托管服务,它默认有请求超时限制(比如230秒),如果PDF生成超过这个时间,服务器会直接返回404/502而非等待处理完成。你可以:

    • 在Azure门户进入你的应用服务,通过「配置」->「常规设置」调整「请求超时」时长;
    • 检查后端生成PDF的代码,看是否有内部超时逻辑导致提前终止并返回错误。
  • 验证路由与参数合法性:先直接在浏览器里带上具体的foodplanId访问这个URL,确认是否能正常返回PDF。如果浏览器访问也返回404,那可能是参数有特殊字符未编码,或者路由配置发生了变化。

  • 换成更现代的HttpClient:WebRequest是较旧的API,HttpClient的异步处理更稳定、配置更灵活,推荐替换成以下写法:

    private readonly HttpClient _httpClient;
    
    // 通过依赖注入注入HttpClient(符合.NET最佳实践)
    public YourController(HttpClient httpClient)
    {
        _httpClient = httpClient;
        _httpClient.Timeout = TimeSpan.FromMinutes(5); // 设置超时时间
    }
    
    public async Task<IActionResult> YourAction(int foodplanId)
    {
        var url = $"http://moachingtestweb.azurewebsites.net/FoodPlanner/Pdf?foodplanId={foodplanId}";
        var response = await _httpClient.GetAsync(url);
        // 确保响应成功,否则抛出异常或处理错误
        response.EnsureSuccessStatusCode();
        var stream = await response.Content.ReadAsStreamAsync();
        return new FileStreamResult(stream, "application/pdf");
    }
    

如果以上方法都没解决问题,建议用抓包工具(比如Fiddler)或浏览器开发者工具查看请求/响应的详细头信息,确认404是真的路由不存在,还是服务器超时返回的“假404”。

内容的提问来源于stack exchange,提问作者Loc Dai Le

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:52:57