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

.NET Maui中使用RestSharp发起API请求遇Android端Bad Request问题

问题分析与解决方案

Bad Request(400)错误本质是请求不符合API的格式要求,Windows正常但Android出错,大概率是跨平台的参数格式化差异导致,而非RestSharp与.NET Maui Android的兼容问题,以下是具体排查和修复步骤:

1. 优先修复经纬度的格式化问题

Windows和Android的系统区域设置可能不同,比如部分地区默认用逗号作为小数点分隔符,这会导致latitude和longitude的字符串格式变成40,7128而非40.7128,最终ll参数格式不符合Foursquare API要求(正确格式应为纬度.xx,经度.yy)。

修改代码,强制使用不变文化格式化数值:

using RestSharp;
using System.Globalization; // 需添加此引用

namespace FindPlacesApp.Code.ApiRequests
{
    public class SearchPlacesRequest
    {
        public async Task<string> GetPlaces(double latitude, double longitude, int radius)
        {
            try
            {
                var options = new RestClientOptions("https://api.foursquare.com/v3/places/search");
                var client = new RestClient(options);
                var request = new RestRequest();

                request.AddHeader("Accept", "application/json");
                request.AddHeader("Authorization", Constants.apiKey);

                // 用不变文化格式化,避免区域设置影响
                var llParam = $"{latitude.ToString(CultureInfo.InvariantCulture)},{longitude.ToString(CultureInfo.InvariantCulture)}";
                request.AddQueryParameter("ll", llParam);
                request.AddQueryParameter("radius", radius.ToString(CultureInfo.InvariantCulture));

                var response = await client.GetAsync(request);

                // 关键:打印错误响应内容,API会明确说明错误原因
                if (!response.IsSuccessStatusCode) {
                    var errorMsg = $"Unsuccess: {response.StatusCode}\n{response.Content}";
                    await AlertDisplayer.DisplayError(errorMsg);
                }

                return response.Content;
            }
            catch (Exception ex)
            {
                await AlertDisplayer.DisplayError($"Exception: {ex}");
            }
            return string.Empty;
        }
    }
}

2. 额外排查点

  • 确认Constants.apiKey在Android环境中正确加载:比如是否存在资源文件读取差异,可在代码中添加日志打印apiKey的内容验证。
  • 检查请求的完整URL:在Android中打印client.BuildUri(request)的结果,对比Windows环境下的URL是否一致,重点看参数部分的格式。

3. 为什么Windows正常?

Windows开发环境的区域设置通常使用点作为小数点,所以直接拼接字符串不会出问题;而Android设备如果使用非英语区域(比如欧洲部分地区),默认会用逗号作为小数点,导致参数格式错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 08:30:08