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

C#程序调用Express API遇CORS错误求助

C#调用Express API的CORS错误解决方案

问题根源

你的Express CORS配置仅允许白名单内的origin请求,但C#的HttpWebRequest默认不会发送Origin请求头,导致API端获取到的origin值为undefined,不在白名单范围内,触发CORS拦截。而网页浏览器会自动携带当前页面的Origin头,因此能正常通过校验。

推荐解决方案(无需关闭CORS)

修改CORS配置,允许无Origin头的请求(对应非浏览器客户端场景),同时保留原有白名单校验:

const dominiosPermitidos = [url];
const corsOptions = {
    origin: function(origin, callback) {
        console.log(origin);
        // 允许无Origin头的请求,同时校验白名单内的合法来源
        if (!origin || dominiosPermitidos.indexOf(origin) !== -1) {
            callback(null, true);
        } else {
            callback(new Error('No permitido por Cors'))
        }
    }
}    

app.use(cors(corsOptions));

备选方案:给C#请求手动添加Origin头

若不想修改API配置,可在C#代码中手动添加Origin头,值设为白名单内的URL:

url = "127.0.0.1/api/datos";
HttpWebRequest myWebRequest = (HttpWebRequest)WebRequest.Create(url);
// 替换为你的白名单URL
myWebRequest.Headers.Add("Origin", "https://你的白名单域名或IP");

HttpWebResponse myHttpWebResponse = (HttpWebResponse)myWebRequest.GetResponse();
Stream myStream = myHttpWebResponse.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myStream);
string Datos = HttpUtility.HtmlDecode(myStreamReader.ReadToEnd());

dynamic data = JsonConvert.DeserializeObject(Datos);

return data;

不建议直接关闭CORS

关闭CORS会使API暴露给任意来源的请求,存在安全风险。除非是完全公开的内部测试接口,否则优先采用上述两种方案解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 09:10:32