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

.NET Framework 4.7控制台发起PATCH API返回403 Postman可正常调用排查

问题原因与修复方案

核心问题1:Basic认证头未主动发送

HttpWebRequest的Credentials属性默认遵循“先收到401挑战响应,再发送认证信息”的逻辑,但Oracle SCIM接口不会返回401挑战,无认证头的请求会直接返回403。Postman会主动在首次请求携带Basic认证头,所以可以正常请求。

核心问题2:Content-Type配置错误

你当前用的application/vnd.oracle.adf.action+json是Oracle ADF接口调用自定义操作的媒体类型,SCIM协议的PATCH资源请求标准媒体类型为application/scim+json,与你Postman里配置的Content-Type不一致导致请求被拦截。

次要问题:JSON字符串语法错误

你代码里定义JSON的最后多了一个多余的右括号),会直接导致编译报错。

修复后的代码示例
using System;
using System.Net;
using System.IO;
using System.Text;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            var result = string.Empty;
            // 移除多余的右括号
            string json = @"{
""schemas"": [
        ""urn:scim:schemas:core:2.0:User"",
        ""urn:scim:schemas:extension:fa:2.0:faUser""
    ],
    ""userName"": ""ZMatt.Dandon @cmpy.com"",
    ""name"": {
        ""familyName"": ""Dandon"",
        ""givenName"": ""ZMatt""
    },
    ""displayName"": ""ZMatt Dandon"",
    ""preferredLanguage"": ""en"",
    ""active"": false
}";
            string url = @"https://url/hcmRestApi/scim/Users/C8FF94E381891376E050480A69294891";
            ServicePointManager.Expect100Continue = true;
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

            HttpWebRequest Req = (HttpWebRequest)WebRequest.Create(url);
            // 手动构造Basic认证头,替代Credentials配置
            string authInfo = "UserName" + ":" + "Password";
            authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
            Req.Headers["Authorization"] = "Basic " + authInfo;

            // 修正为SCIM PATCH要求的Content-Type
            Req.ContentType = "application/scim+json";
            Req.Method = "PATCH";

            using (var streamWriter = new StreamWriter(Req.GetRequestStream()))
            {
                streamWriter.Write(json);
            }

            var httpResponse = (HttpWebResponse)Req.GetResponse();
            using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
            {
                result = streamReader.ReadToEnd();
            }
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:18:05