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

C#调用Python Flask RestAPI返回308永久重定向问题求助

问题原因与解决方案

1. 资源被判定移动的原因

这是Flask框架默认的严格尾部斜杠路由规则导致的:
你在服务端注册的路由是/name/(尾部带斜杠),当收到路径为/name(尾部不带斜杠)的请求时,Flask会自动返回308状态码,引导客户端重定向到带斜杠的/name/路径。
Postman、网页浏览器默认开启了自动跟随重定向的配置,所以你看不到中间的308响应,直接拿到最终的JSON结果;而你使用的C#客户端默认没有对308状态码做自动跟随重定向处理,所以直接返回了308响应。

2. 问题归属

本质是服务端路由规则和客户端请求路径不匹配导致的兼容性问题,两端都可以通过调整配置解决。

3. 修复方案

提供两种可选修复方向,任选其一即可:

方案1:调整服务端配置(推荐,兼容性更好)

  • 要么修改路由定义,去掉尾部斜杠,和客户端请求路径对齐:
# 把原来的 @app.route('/name/') 改成下面的写法
@app.route('/name')
def nameEndpoint():
    return jsonify({'name':"Some name"}), 200
  • 要么全局关闭Flask的严格尾部斜杠校验,让带/不带斜杠的路径都能匹配同一个路由:
app = Flask(__name__)
# 新增这一行配置
app.url_map.strict_slashes = False

方案2:调整客户端配置

  • 要么直接修改请求URL,加上尾部斜杠,和服务端路由完全对齐:
var url = "http://localhost:5000/name/";
  • 要么配置客户端开启308重定向自动跟随:
    以HttpClient为例:
public async Task TryWithHttpClient()
{
    var handler = new HttpClientHandler()
    {
        AllowAutoRedirect = true,
        // 兼容308状态码重定向
        AutomaticRedirectionStatusCodes = new HashSet<System.Net.HttpStatusCode>()
        {
            System.Net.HttpStatusCode.Moved,
            System.Net.HttpStatusCode.Redirect,
            System.Net.HttpStatusCode.RedirectMethod,
            System.Net.HttpStatusCode.RedirectKeepVerb, // 对应308
            System.Net.HttpStatusCode.PermanentRedirect
        },
        MaxAutomaticRedirections = 5
    };
    var client = new HttpClient(handler);
    var json = await client.GetStringAsync(url);
}

RestSharp同理,配置ClientOptions的AllowAutoRedirect = true即可。


内容的提问来源于stack exchange,提问作者Mc_Topaz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:06:04