2010-08-26 11 views
5

Bài đăng đầu tiên chưa từng có. Vì vậy, tốt hơn làm cho nó một tốt.Cách gọi URL bên ngoài từ giải pháp ASP.NET MVC

Tôi có ứng dụng web ASP.NET MVC 2, trong đó tôi có actionResult tôi cần thực hiện cuộc gọi cho tôi.

Điều này là cần A.R để xử lý một số thao tác dữ liệu và sau đó tôi cần nó để gọi URL bên ngoài thực sự là Mô-đun công ty xử lý việc gửi tin nhắn đến điện thoại của công ty chúng tôi.

Nó chỉ cần gọi URL mà trông như thế này:

string url = "http://x.x.x.x/cgi-bin/npcgi?no=" + phoneNumber + "&msg=" + message; 

Tôi không cần bất kỳ thông báo trả lại hoặc bất cứ điều gì. Chỉ muốn gọi URL bên ngoài đó tất nhiên nằm ngoài phạm vi ứng dụng web của riêng tôi. (Tôi không muốn chuyển hướng). URL đó phải được gọi phía sau GUI mà người dùng không bao giờ nhận ra. Và trang mà họ đang xem không bị ảnh hưởng.

Tôi đã thử với:

Server.Execute(url); 

Tuy nhiên đã không làm việc. Tôi đã nghe nói rằng một số ppl đi về điều này bằng cách có một iFrame ẩn trên trang. Việc thiết lập src đến url có thể cần và sau đó bằng cách nào đó thực hiện điều đó, để có được cuộc gọi được khởi tạo. Nó không có vẻ thanh lịch với tôi, nhưng nếu đó là giải pháp duy nhất, thì có ai có ví dụ về cách thực hiện điều đó không. Hoặc nếu bạn có một gợi ý kiểu dáng đẹp hơn, tôi là tất cả các tai.

Trả lời

6

tôi cuối cùng đã nhận nó làm việc với các đoạn mã này:

string messageToCallInPatient = "The doctor is ready to see you in 5 minutes. Please wait outside room " + roomName; 
string url = "http://x.x.x.x/cgi-bin/npcgi?no=" + phoneNumber + "&msg=" + 
       messageToCallInPatient; 
HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(string.Format(url)); 
webReq.Method = "GET"; 
HttpWebResponse webResponse = (HttpWebResponse)webReq.GetResponse(); 

//I don't use the response for anything right now. But I might log the response answer later on. 
Stream answer = webResponse.GetResponseStream(); 
StreamReader _recivedAnswer = new StreamReader(answer); 
1

Vì bạn không mong đợi một giá trị trả về từ url, cách đơn giản nhất là

  • Sau khi Execution AR, sử dụng Webclient để kích hoạt URL
  • Hoặc bởi HTTP GET hoặc POST (Synchronous hoặc không đồng bộ)

mẫu mã

WebClient wc = new WebClient(); 
    wc.UploadProgressChanged += (sender, evtarg) => 
      { 
       Console.WriteLine(evtarg.ProgressPercentage); 
      }; 

     wc.UploadDataCompleted += (sender, evtarg) => 
      { 
       String nResult; 
       if (evtarg.Result != null) 
       { 
        nResult = Encoding.ASCII.GetString(evtarg.Result); 
        Console.WriteLine("STATUS : " + nResult); 
       } 
       else 
        Console.WriteLine("Unexpected Error"); 

      }; 


     String sp= "npcgi??no=" + phoneNumber + "&msg=" + message; 
     System.Uri uri = new Uri("http://x.x.x.x/cgi-bin/"); 
     wc.UploadDataAsync(uri, System.Text.Encoding.ASCII.GetBytes(sb); 

Các mẫu sử dụng lệnh HTTP POST và Asynchronous (Vì vậy, nó sẽ trở lại ngay lập tức sau khi kích hoạt URL - Không chặn)

+0

Vì vậy, về cơ bản tôi chỉ cần làm điều này, vì tôi không có nhu cầu để kiểm tra các tiến trình% hoặc stuff like that: Lưu ý: Don Bạn có một "?" quá nhiều trong chuỗi sp = "npcgi ?? no ="? chuỗi phoneNumber = nextPatient.Handset.CallNumber; tin nhắn chuỗiToCallInPatient = "Bác sĩ sẵn sàng gặp bạn trong vòng 5 phút. Vui lòng tiếp tục đến khu vực chờ"; url chuỗi = "npcgi? No =" + phoneNumber + "& msg =" + messageToCallInPatient; WebClient wc = new WebClient(); Uri netPageUrl = new Uri ("http://172.20.120.59/cgi-bin/"); wc.UploadDataAsync (netPageUrl, System.Text.Encoding.ASCII.GetBytes (url)); – Memphis

+0

@Memphis, tôi hiểu rằng bạn không cần phải xử lý tiến độ ... sau đó chỉ cần làm cho nó một handler trống rỗng, không cần phải viết bất cứ điều gì bên trong ....Và hãy thử điều này với các URL thực tế của bạn và cho tôi biết ... – RameshVel

+0

Tôi đã hiểu ví dụ của bạn. Tôi đã thử nó mà không có eventhandlers của bạn nhưng vẫn có một số lỗi. Tôi thực sự nghĩ rằng URL được tạo bị lỗi. Nhưng tôi đã giải quyết vấn đề bằng cách sử dụng httpwebrequest. Xem mã làm việc của tôi dưới đây. Cảm ơn – Memphis

0

Bạn có thể sử dụng chỉ đơn giản là "return Redirect (url);"

+0

Nhưng điều đó sẽ chuyển hướng người dùng của tôi từ trang hiện tại của họ đến trang bên ngoài. Tôi không muốn điều đó. Tôi chỉ muốn thực thi URL bên ngoài, nguyên nhân của tin nhắn văn bản mà nó sẽ gửi đến một chiếc điện thoại. Tôi tất cả phải xảy ra đằng sau GUI mà không cần người dùng nhìn thấy bất cứ điều gì hoặc phải rời khỏi trang hiện tại. – Memphis