2012-07-31 7 views
5

Tôi đang sử dụng RedirectToAction trong ứng dụng ASP.Net WebAPI của mình và tôi đã thử ứng dụng sau.Sử dụng RedirectToAction trong API Web

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

Điều này tạo ra chuyển hướng như dưới đây.

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

Nhưng, vì tôi đang sử dụng WebAPI, tôi cần phải là URL như dưới đây.

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

Làm cách nào để thực hiện việc này?

Trả lời

3

Tôi không chắc chắn như thế nào định tuyến, Web API chữ ký hành động của bạn trông giống như vì vậy tôi sẽ cố gắng đoán. Một số điều không thực sự thêm lên đây (? Tại sao bạn sẽ vượt qua mật khẩu trong url)

nhưng ...

Với cấu trúc url của bạn tôi đoán định tuyến của bạn là một cái gì đó như:

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

sau đó cho rằng, tôi đoán authenticateuser của bạn phải là một cái gì đó như:

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

Nếu vậy, sau đó chuyển hướng đến điều này từ một bộ điều khiển MVC bạn ne ed:

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

'RedirectToAction' là MVC không phải API Web. – Aliostad

+0

Vâng, bạn có thể làm việc xung quanh bằng cách sử dụng Chuyển hướng trong chuỗi và chuyển đến đó một URL tuyến đường Api Web dựng lên bằng UrlHelper. Không đẹp nhưng tôi không chắc chắn những gì OP đang cố gắng đạt được. –

+0

Hoạt động tốt, cảm ơn rất nhiều. – thilok

4

Nếu người dùng không được xác thực, bạn không nên chuyển hướng. Thường không có người dùng tương tác ở đầu bên kia, do đó bạn thực sự phải trả về Mã trạng thái HTTP 401 thay vì chuyển hướng.


Không có tương đương trong ASP.NET Web API.

Nếu bạn cứ khăng khăng làm việc đó thì ở đây nó là:

Bạn ném HttpResponseException:

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

Tôi nghĩ bạn không hiểu được. Những gì tôi muốn là kích hoạt một hành động Web API bằng cách sử dụng phương pháp này. – thilok

+0

@thilok Tôi cũng nghi ngờ bạn hiểu ý tôi là gì. Nhưng dù sao ở đây cũng là một bản cập nhật nếu bạn khăng khăng làm điều đó. – Aliostad

0

Tôi cũng đã đưa ra một giải pháp đơn giản. Không phải là rất tốt như trên, nhưng giá trị chia sẻ.

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

Cảm ơn tất cả.