2012-07-31 11 views
5

ASP.Net WebAPI uygulamamda RedirectToAction kullanıyorum ve aşağıdakilerden birini denedim.Web API'sinde RedirectToAction kullanın

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

Bu, aşağıdaki gibi yeniden yönlendirme oluşturur.

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

Ancak, WebAPI'yi kullandığım için aşağıdaki gibi bir URL olmalıyım.

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

Bunu nasıl yaparım?

cevap

3

Ben yönlendirme, Web API eylem imza denemek böylece benziyor emin değilim tahmin etmek.

:

ama ... Ben senin yönlendirme tahmin ediyorum Url'nizde yapı göz önüne alındığında

gibi bir şey birkaç nokta gerçekten (? Neden url şifreyi geçerdi) Buraya kadar katmayan olduğunu Eğer öyleyse, o zaman NE MVC denetleyicisi bu yönlendirmek için

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

:

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

sonra göz önüne alındığında, ben senin authenticateuser gibi bir şey olmalı sanırım ed:

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

'RedirectToAction' MVC değil Web API'sıdır. – Aliostad

+0

Evet, bir dizeyi alan ve orada UrlHelper ile bir Web Api rota URL'si ileten Redirect'i kullanarak bu konuda çalışabilirsiniz. Güzel değil ama OP'nin başarmaya çalıştığı şeyden emin değilim. –

+0

İyi çalışıyor, çok teşekkürler. – thilok

4

Kullanıcı kimliği doğrulanmamışsa yönlendirmemelisiniz. Diğer ucunda genellikle etkileşimli kullanıcı yoktur, bu yüzden HTTP Durum Kodu 401'i yeniden yönlendirme yerine döndürmelisiniz. ASP.NET Web API'sinde eşdeğer yoktur.

Eğer ısrar ederse öyle sonra burada yapıyor:

Sen HttpResponseException atmak:

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

Sanırım bunu anlamadım. İstediğim, bu yöntemi kullanarak bir Web API eylemini tetiklemektir. – thilok

+0

@thilok Ayrıca, ne demek istediğimi anladığından şüpheliyim. Ama yine de, bunu yapmakta ısrar ederseniz bir güncelleme. – Aliostad

0

Ayrıca basit bir çözüm buldum. Yukarıdaki kadar iyi değil, ama paylaşmaya değer.

 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(); 

Hepinize teşekkür ederiz.

İlgili konular