我正在使用此API调用查询给定REST批处理作业的状态
GET https://xxx.egnyte.com/pubapi/v1/audit/jobs/1381774131181 HTTP/1.1
Authorization: Bearer 3ysd8zxxxxxxxxxx
Content-Type: application/json
Host: xxx.egnyte.com
Connection: Keep-Alive
HTTP响应如下:
HTTP/1.1 303 See Other
Date: Mon, 14 Oct 2013 18:12:29 GMT
Server: Mashery Proxy
Set-Cookie: EGNYTE-MARKETING-SESSION-COOKIE=1; path=/; domain=egnyte.com
Set-Cookie: X-Egnyte-Subdomain=xxx; path=/; domain=egnyte.com; expires=Tue, 14-Oct-2014 18:12:29 GMT
X-Mashery-Responder: avl-mashery-master
Location: https://haproxy:7180/public-api/v1/audit/logins/1381774131181
Content-Type: application/json;charset=UTF-8
P3P: CP="NOI DSP COR NID CUR TAIa OUR NOR" policyref="/w3c/p3p.xml"
Set-Cookie: EGNYTE-MARKETING-COOKIE=22.22.186.9.138333333885; path=/; expires=Tue, 14-Oct-14 18:12:29 GMT; domain=.egnyte.com
Set-Cookie: JSESSIONID=1333398F4E959E33333F2EA0DB1.avl-app17_6280; Path=/; Secure; HttpOnly
X-Robots-Tag: none
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
16
{"status":"completed"}
0
.NET似乎对此响应感到困惑,并发布以下内容:
显然,.NET没有看到上面的HTTP 303,而是通过查看位置URL来报告502,而无法从互联网客户端获取。
问题
HTTP响应应该是什么? (我正在轮询状态,应该更改或删除哪些内容?)
如何才能让.NET很好地播放,以便我可以提取代码中嵌入的JSON?
答案 0 :(得分:2)
我无法说明应该应该是什么(上下文太少),但要处理303响应本身而不是按照您需要的Location
URL进行操作失去抽象级别:使用HttpWebRequest
并将AllowAutoRedirect
设置为false
。
例如:
var request = (HttpWebRequest)WebRequest.Create(url);
request.AllowAutoRedirect = false;
using (WebResponse response = request.GetResponse())
{
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
var json = reader.ReadToEnd();
}
}
答案 1 :(得分:0)
我会说你永远不应该向公共客户端303 See Other; Location: private-url
提供服务。
你根本不应该提供这样的回应。
如果您想在DC中使用本地网址,那么您的前端服务器,例如例如,反向代理应该将响应更改为403 Forbidden
,因为这是私有网址的含义。
其他替代方案是202 Accepted
或204 No Content
,因为语义服务器已接受请求并拒绝泄露响应。