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

Glitch上的ASP.NET Core WebAPI无法被C#(Unity)调用求助

问题:Unity3D中C#调用Glitch上的ASP.NET WebAPI返回403 Forbidden

我在glitch.com上搭建了一个ASP.NET .NET6 WebAPI项目,接口https://ror-test.glitch.me/getip用于返回访问者IP,浏览器和Node.js调用都正常,但Unity的C#客户端调用时返回403错误。

已尝试的方法及结果

1. 使用HttpClient.GetStringAsync

代码:

HttpClient client = new HttpClient();
string response = await client.GetStringAsync(url);
System.Console.WriteLine(response);

错误输出:

Unhandled exception. System.Net.Http.HttpRequestException: Response status code does not indicate success: 403 (Forbidden).

2. 使用HttpClient.GetAsync

代码:

HttpClient client = new HttpClient();
var response = await client.GetAsync(url);

返回结果:

  • 响应状态:403 Forbidden
  • 响应内容:显示Cloudflare拦截页面,无有效业务返回

3. Node.js调用(正常工作)

代码:

var url = "https://ror-test.glitch.me/getip";

var XMLHttpRequest = require("xhr2");

var xhr = new XMLHttpRequest();
console.log("starting");
xhr.open("GET", url);

xhr.onreadystatechange = function () {
   if (xhr.readyState === 4) {
      console.log(xhr.status);
      console.log(xhr.responseText);
   }};

xhr.send();

输出:

starting
200
your ip: xx.xx.xxx.xx

问题分析

403错误源于Glitch默认使用的Cloudflare防护机制,Unity默认的HttpClient请求缺少标准浏览器的请求头标识,被识别为非正常访问请求而拦截。

解决方案

方案1:给HttpClient添加模拟浏览器的请求头

修改C#代码,补充User-Agent等关键请求头,让请求符合正常浏览器访问特征:

using System;
using System.Net.Http;
using System.Threading.Tasks;
using UnityEngine;

public class IpFetcher
{
    public async Task<string> FetchIpAsync()
    {
        string url = "https://ror-test.glitch.me/getip";
        using (HttpClient client = new HttpClient())
        {
            // 添加浏览器标识请求头
            client.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36");
            client.DefaultRequestHeaders.Accept.ParseAdd("text/plain, */*");

            try
            {
                HttpResponseMessage response = await client.GetAsync(url);
                response.EnsureSuccessStatusCode();
                return await response.Content.ReadAsStringAsync();
            }
            catch (HttpRequestException ex)
            {
                Debug.LogError($"请求失败:{ex.Message}");
                return null;
            }
        }
    }
}

方案2:使用UnityWebRequest(更适配Unity环境)

Unity自带的UnityWebRequest对引擎网络环境兼容性更好,同样添加请求头即可:

using UnityEngine;
using UnityEngine.Networking;
using System.Collections;

public class UnityIpFetcher : MonoBehaviour
{
    void Start()
    {
        StartCoroutine(GetIpCoroutine());
    }

    IEnumerator GetIpCoroutine()
    {
        string url = "https://ror-test.glitch.me/getip";
        using (UnityWebRequest request = UnityWebRequest.Get(url))
        {
            // 设置请求头模拟浏览器
            request.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36");
            request.SetRequestHeader("Accept", "text/plain, */*");

            yield return request.SendWebRequest();

            if (request.result != UnityWebRequest.Result.Success)
            {
                Debug.LogError($"请求错误:{request.error}");
            }
            else
            {
                Debug.Log($"获取到IP:{request.downloadHandler.text}");
            }
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 11:15:36