2013-06-01 5 views
0

Мне нужно подражать простому действию в HTML, этот HTML-код действительно работает для моей цели, но я должен сделать одно и то же действие в MVC ASP.NET.Правильное моделирование действия HTML в MVC ASP.NET

Вот HTML:

<HTML> 
<HEAD> 
</HEAD> 
    <BODY> 
     <FORM method="post" autocomplete="off" ACTION="https://<target IP>/auth/index.html/u"> 
     Username:<BR> 
     <INPUT type="text" name="user" accesskey="u" SIZE="25" VALUE=""> 
     <BR> 
     Password:<BR> 
     <INPUT type="password" name="password" accesskey="p" SIZE="25" 
     VALUE=""> 
     <BR> 
     <INPUT type="submit"> 
     </FORM> 
    </BODY> 

Этот HTML получает два параметра "пользователя" и "пароль" и отправляет их в URI. Я пробовал методы «GET» и «POST» в своем приложении, но это не сработало. Вот мой контроллер в MVC ASP.NET:

[AllowAnonymous] 
    [HttpPost] 
    public ActionResult Login(LoginModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      string ArubaPost = "user=" + model.user + "&password=" + model.password; 
      string ArubaURI = "https://<target IP>/auth/index.html/u"; 
      // this is to bypass the SSL certiface, not sure if it is needed 
      System.Net.ServicePointManager.CertificatePolicy = new MyPolicy(); 

      // web request 
      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(ArubaURI); 
      request.KeepAlive = false; 
      request.AllowAutoRedirect = false; 
      request.Method = "POST"; 
      request.ContentType = "application/x-www-form-urlencoded"; 
      byte[] postBytes = Encoding.Default.GetBytes(ArubaPost); 
      request.ContentLength = postBytes.Length; 
      Stream requestStream = request.GetRequestStream(); 
      requestStream.Write(postBytes, 0, postBytes.Length); 
      requestStream.Close(); 

      HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
      Stream resStream = response.GetResponseStream(); 


      string location = response.Headers[HttpResponseHeader.Location]; 
      return Redirect(ArubaURI + location); 

     } 

     // If we got this far, something failed, redisplay form 
     return View(model); 
    } 

Я также попробовал «GET» действие, но результат как для такой же. Я действительно не получаю никаких ошибок, и когда он запущен в браузере, я вижу, что запрос отправляется с кодом состояния 200 с помощью элемента проверки Chrome. Это страница, в которой сетевой контроллер перенаправляет весь трафик на нее, а затем пользователю нужно ввести имя пользователя и пароль. Затем, когда он отправляется через POST или GET, сетевой контроллер должен отображать параметры и проверять их. В случае успешной проверки сетевой контроллер перенаправляет пользователя на запрашиваемую им страницу, чтобы он мог просматривать веб-страницы. Эта простая HTML-страница выполняет все это, но в приложении MVC я снова и снова перенаправляется на ту же страницу входа в систему. любые идеи, что может быть неправильным?

ответ

1

Это не сработает, потому что cookie аутентификации не хранится в браузерах. Вместо этого он передается вашему серверу (приложение MVC).

Вы не сможете достичь своей цели с помощью своего текущего подхода. Потому что даже если ваш сервер передает эти файлы cookie клиенту (браузеру), он не будет работать, поскольку эти файлы cookie будут отправляться только на ваш сервер, а не на сервер <target IP>.

+0

Благодарим вас, так какой из возможных способов сделать это? – FrozenHG

+0

Я думаю, вы можете использовать прокси-сервер http для удовлетворения ваших потребностей на основе моих угадываний. Вы можете проверить ответы в этом вопросе: http://stackoverflow.com/questions/9276055/free-open-source-proxy-server-in-java-with-support-for-ipv6-https-user-managemen – deerchao

Смежные вопросы