이러한 메소드는 HttpHelper 클래스에 있습니다. 이제 초기 호출은 사용자 자격 증명의 유효성을 검사하고 true를 반환합니다. 그것은 예상된다. 다음 호출은 사용자를 등록하는 것입니다. 그건 딸꾹질없이 잘가는 것 같고 새로운 사용자 ID를 반환하는 것입니다. 사용자 ID를 반환하는 대신 true를 다시 반환합니다. 거의 캐시 된 것처럼 처음 호출에서 결과를 반환합니다. 왜 이런 일이 일어날 지에 대한 생각을 가진 사람은 누구입니까?후속 httpClient 호출이 초기 호출 결과를 반환합니다.
private static CookieStore sCookieStore;
private static String invoke(HttpUriRequest request)
throws ClientProtocolException, IOException {
String result = null;
DefaultHttpClient httpClient = new DefaultHttpClient();
// restore cookie
if (sCookieStore != null) {
httpClient.setCookieStore((org.apache.http.client.CookieStore) sCookieStore);
}
//request.addHeader("Host", "localhost");
HttpResponse response = httpClient.execute(request);
StringBuilder builder = new StringBuilder();
BufferedReader reader = new BufferedReader(new InputStreamReader(
response.getEntity().getContent()));
for (String s = reader.readLine(); s != null; s = reader.readLine()) {
builder.append(s);
}
result = builder.toString();
Log.d(TAG, "result is (" + result + ")");
// store cookie
sCookieStore = (CookieStore) ((AbstractHttpClient) httpClient).getCookieStore();
return result;
}
public static String invokeGet(String action, List<NameValuePair> params) {
try {
StringBuilder sb = new StringBuilder(API_URL);
sb.append(action);
if (params != null) {
for (NameValuePair param : params) {
sb.append("?");
sb.append(param.getName());
sb.append("=");
sb.append(param.getValue());
}
}
Log.d(TAG, "url is" + sb.toString());
//HttpGet httpGet = new HttpGet(URLEncoder.encode(sb.toString(), "UTF-8"));
HttpGet httpGet = new HttpGet(sb.toString());
return invoke(httpGet);
} catch (Exception e) {
Log.e(TAG, e.toString());
}
return null;
}
public static String invokeGet(String action) {
return invokeGet(action, null);
}
다음은 내가 작성한 전화입니다. 위에 지정된대로 authResult 변수는 문자열 결과가 true가됩니다. nextResult 사용자 ID 값을 보유하는 대신 초기 요청과 같은 참 값을 유지해야
String authResult = HttpHelper.invokeGet("<url to validate user>");
if (this.URL.indexOf("register") > -1)
String nextResult = HttpHelper.invokeGet(this.URL);
else
String nextResult = HttpHelper.invokeGet(this.URL);
업데이트는 다음 sCookieStore
변수에 추가.
업데이트] 2 다음 API (MVC .NET)를 통해 호출되는 방법에 추가하면 :
public bool Get(String userName, String userPassword)
{
Task<IdentityUser> iu = _repo.FindUser(userName, userPassword);
if (iu != null)
{
FormsAuthentication.SetAuthCookie(userName, false);
return true;
}
return false;
}
nextResult
변수가이 결과를 얻어야한다 :
authResult
변수는이 결과를 얻을 것이다 :
[HttpGet]
[AllowAnonymous]
public async Task<IHttpActionResult> RegisterUser(String userName, String userPassword, String huh)
{
UserModel userModel = new UserModel();
userModel.ConfirmPassword = userPassword;
userModel.UserName = userName;
userModel.Password = userPassword;
String userID = "";
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
IdentityResult result = await _repo.RegisterUser(userModel);
IHttpActionResult errorResult = GetErrorResult(result);
if (errorResult != null)
{
return errorResult;
}
else
{
Task<IdentityUser> iu = _repo.FindUser(userModel.UserName, userModel.Password);
using (var context = new AuthContext())
{
var userStore = new UserStore<IdentityUser>(context);
var userManager = new UserManager<IdentityUser>(userStore);
userID = iu.Result.Id;
result = await userManager.AddToRoleAsync(userID, "Users");
errorResult = GetErrorResult(result);
if (errorResult != null)
{
return errorResult;
}
}
}
return Ok("userID:" + userID);
}
올바른 URL을 치고 있으며 컬을 사용하여 응답을 테스트했다고 가정합니다. 또한'for (NameValuePair param : params) {sb.append ("?"); ..''버그를 가지고 있습니다. – Vlad
@Vlad - 사용중인 API는 .NET MVC로 작성되었습니다. 저는 Visual Studio 2013을 통해 테스트를했으며 모든 것이 잘 돌아갔습니다. NameValuePair 이제 방금 매개 변수를 전달할 때 메서드의 해당 부분을 사용하지 않았기 때문에 방금 포함 된 NameValuePair입니다. 그래서 나는 아직 그 코드의 그 부분을 디버깅하지 않았다. 다른 invokeGet 및 현재 사용중인 null 전달 때문에 추가되었습니다. – iCobot