好的,继续我上一个问题,我说过在Android HttpPost中添加一个Cookie并不困难:这很难(比我想象的还要好)..
我在Android应用中使用以下HttpPost方法:
@Override
protected String doInBackground(String... urls){
String response = "";
for(String url : urls){
HttpPost post = new HttpPost(url);
try{
URL u = new URL(url);
String baseUrl = u.getProtocol() + "://" + u.getHost();
// POST-request requires anti-forgery Cookie
CookieManager cookieManager = CookieManager.getInstance();
String cookie = cookieManager.getCookie(baseUrl);
post.setHeader("Cookie", cookie);
// POST-request requires cookieToken, provider and returnUrl
String[] cookieStrings = cookie.split("=");
List<NameValuePair> nvPairs = new ArrayList<NameValuePair>(3);
nvPairs.add(new BasicNameValuePair(cookieStrings[0], cookieStrings[1]));
nvPairs.add(new BasicNameValuePair("provider", "Google"));
nvPairs.add(new BasicNameValuePair("returnUrl", baseUrl));
post.setEntity(new UrlEncodedFormEntity(nvPairs));
HttpResponse execute = client.execute(post);
// Get the response of the POST-request
InputStream content = execute.getEntity().getContent();
BufferedReader buffer = new BufferedReader(new InputStreamReader(content));
String s = "";
while((s = buffer.readLine()) != null)
response += s;
}
catch(Exception ex){
ex.printStackTrace();
}
}
return response;
}
当我调试response
时,我收到以下错误:
无法解密防伪令牌。如果这个应用程序是 由Web场或群集托管,确保所有计算机都在运行 相同版本的ASP.NET网页和&lt; machineKey&gt; configuration指定显式加密和验证密钥。 无法在群集中使用AutoGenerate。
我已用Google搜索此错误并找到this link。他们在这里向C#machineKey
添加Web.config
。我检查过,这个machineKey
已经存在于我的Web API的C#项目中。
因此,阅读上述错误后,我认为这是因为我只是从Android应用程序运行HttpPost
和HttpGet
请求(即 { {1}} 部分?我在这方面是否正确?
更重要的是,如何在Android中修复此错误,以便我可以成功发送Web Farm or cluster
+ Cookie
,因此我已使用CookieToken
登录。因此,我可以开始使用来自同一POST-request
GET-requests
的{{1}}。
提前感谢您的回复。
编辑1:
阅读this stackoverflow question的答案后:
[Authorized]
。DefaultHttpClient
已添加到@Html.AntiForgeryToken()
。答案 0 :(得分:0)
好的,这个错误已经解决了。原来我有三个cookie而不是一个,所以使用string-split我有一个下一个cookie的部分字符串令牌。现在通过单独获取所有cookie(使用&#34 ;;&#34;分割),然后使用&#34; =&#34;分割正确的cookie来解决这个问题。发送它。
然而,在我这样做之后,如果收到下一个错误:
验证提供的防伪令牌失败。饼干 &#34; __ RequestVerificationToken&#34;和表格领域 &#34; __ RequestVerificationToken&#34;交换了。
但至少我可以再次继续,上面的错误就解决了。