leo*_*ora 7 c# rest httpclient confluence confluence-rest-api
我正在从Confluence的SOAP API迁移到使用他们的REST API.我看到有支持向页面添加附件(通过执行POST),但我遇到了让它工作的问题(我收到403:Forbidden Error消息).我有其他"获取"项目通过其余的api正常工作,但做一个附件帖似乎一直在失败.
这是我当前的代码(给定一个特定的文件名):
byte[] rawData = File.ReadAllBytes(filename);
var pageId = "11134";
var url = new Uri("http://example.com:9088/rest/api/content/" + pageId + "/child/attachment");
var requestContent = new MultipartFormDataContent();
var imageContent = new ByteArrayContent(rawData);
imageContent.Headers.ContentType = MediaTypeHeaderValue.Parse(attachement.contentType);
requestContent.Add(imageContent, "file", attachement.fileName);
requestContent.Headers.Add("X-Atlassian-Token", "nocheck");
Run Code Online (Sandbox Code Playgroud)
你能看出我上面做错了吗?
403状态表示未授权请求.要授权请求,您需要指定Authorization标头.Confluence REST API支持基本授权方案.对于基本身份验证,您需要为每个请求指定以下标头:Authorization: Basic username:password其中username:password部分应为Base64编码.您可以使用以下代码执行此操作:
string userName;
string password;
string authorizationString = userName + ":" + password;
string encodedValue = Convert.ToBase64String(Encoding.ASCII.GetBytes(authorizationString));
string authorizationHeaderValue = "Basic " + encodedValue;
requestContent.Headers.Add("Authorization", authorizationHeaderValue);
Run Code Online (Sandbox Code Playgroud)
根据此链接,您还应该为每个请求指定以下url参数:os_authType=basic.
HTTP基本身份验证:(授权HTTP标头)包含"基本用户名:密码".但请注意,用户名:密码必须为base64编码.URL还必须包含'os_authType = basic' 查询参数.
注意:如果使用基本身份验证,请确保通过https连接;
来自 Confluence 文档 (RTFM)
为了防止 XSRF 攻击,由于此方法接受 multipart/form-data,因此具有 XSRF 保护。这意味着您必须在请求中提交 X-Atlassian-Token: nocheck 标头,否则将被阻止。
在之前添加此内容Post
httpClient.Headers.Add("X-Atlassian-Token", "nocheck");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1678 次 |
| 最近记录: |