2012-07-31 36 views
5

Używam RedirectToAction w mojej aplikacji ASP.Net WebAPI i próbowałem następującej.Użyj narzędzia RedirectToAction w interfejsie API sieci Web

return RedirectToAction("AuthenticateUser", "AuthenticationServiceWebApi", new RouteValueDictionary 
                    { 
                     {"userName", model.UserName}, 
                     {"password", model.Password} 
                    }); 

Generuje przekierowania jak poniżej.

127.0.0.1:81/authenticationservicewebapi/authenticateuser/admin/[email protected] 

Ale ponieważ używam WebAPI, muszę być adresem URL, jak poniżej.

127.0.0.1:81/api/authenticationservicewebapi/authenticateuser/admin/[email protected] 

Jak to zrobić?

Odpowiedz

3

Nie jestem pewien, w jaki sposób routingu, podpis działanie Web API wyglądać tak postaram zgadywać. Kilka rzeczy naprawdę nie sumują się tutaj (dlaczego chcesz przekazać hasło w URL)

ale ...

Biorąc pod uwagę strukturę url Przypuszczam routingu jest coś takiego:

routes.MapHttpRoute(
     name: "DefaultApi", 
     routeTemplate: "api/{controller}/{action}/{id}/{id2}", 
     defaults: new { id = RouteParameter.Optional, id2 = RouteParameter.Optional } 
    ); 

następnie podano, że myślę, że Twój authenticateuser musi być coś takiego:

public HttpResponseMessage AuthenticateUser([FromUri]string id, [FromUri]string id2) 

Jeśli tak, wówczas przekierować do tego od kontrolera MVC ty ne ed:

 return Redirect(
      Url.RouteUrl("DefaultApi", 
       new { httproute = "", 
         controller = "AuthenticationServiceWebApi", 
         action = "AuthenticateUser", 
         id = model.UserName, 
         id2 = model.Password 
      })); 
+12

'RedirectToAction' to MVC nie Web API. – Aliostad

+0

Tak, możesz obejść to, korzystając z przekierowania, które pobiera ciąg znaków i przekazuje tam URL trasy w sieci Web Api z UrlHelper. Nie jest ładna, ale nie jestem pewna, co OP stara się osiągnąć. –

+0

Działa dobrze, wielkie dzięki. – thilok

4

Jeśli użytkownik nie jest uwierzytelniony, nie powinieneś przekierowywać. Zwykle na drugim końcu nie ma użytkownika interaktywnego, więc powinieneś naprawdę zwrócić kod stanu HTTP 401 zamiast przekierowania.


Nie ma odpowiednika w ASP.NET Web API.

Jeśli upierasz robi to wtedy to jest tutaj:

Rzucasz HttpResponseException:

var httpResponseMessage = new HttpResponseMessage(HttpStatusCode.Found); 
httpResponseMessage.Headers.Location = new Uri(myAddress, UriKind.Relative); 
throw new HttpResponseException(httpResponseMessage); 
+0

Myślę, że nie udało się tego Sir. Potrzebuję wywołać akcję Web API przy użyciu tej metody. – thilok

+0

@thilok Wątpię też, że zrozumiałeś o co mi chodzi. Ale w każdym razie tutaj jest aktualizacja, jeśli nalegasz, aby to zrobić. – Aliostad

0

Wymyśliłem również proste rozwiązanie. Nie bardzo dobry jak wyżej, ale warty dzielenia się.

 string post_data = "userName=th&[email protected]"; 

     string uri = "http://127.0.0.1:81/api/authenticationservicewebapi/authenticateuser"; 

     // create a request 
     HttpWebRequest request = (HttpWebRequest) 
     WebRequest.Create(uri); 
     request.KeepAlive = false; 
     request.ProtocolVersion = HttpVersion.Version10; 
     request.Method = "POST"; 

     // turn our request string into a byte stream 
     byte[] postBytes = Encoding.ASCII.GetBytes(post_data); 

     // this is important - make sure you specify type this way 
     request.ContentType = "application/x-www-form-urlencoded"; 
     request.ContentLength = postBytes.Length; 
     Stream requestStream = request.GetRequestStream(); 

     // now send it 
     requestStream.Write(postBytes, 0, postBytes.Length); 
     requestStream.Close(); 

Dziękuję wszystkim.

Powiązane problemy