2012-04-10 56 views
5

Tôi chắc chắn điều này phải được trả lời trước nhưng tôi không thể tìm được giải pháp, vì vậy tôi có thể hiểu nhầm các giải pháp của người khác hoặc cố gắng làm điều gì đó, nhưng ở đây chúng tôi .C# Mở trang web trong trình duyệt mặc định với dữ liệu bài

Tôi đang viết bổ trợ cho triển vọng 2010 trong C# nơi người dùng có thể nhấp vào nút trong ruy-băng và gửi nội dung email đến trang web. Khi họ nhấp vào nút, trang web sẽ mở trong trình duyệt mặc định, do đó cho phép họ xem lại nội dung vừa được gửi và tương tác với nội dung trên trang web. Tôi có thể thực hiện việc này bằng cách sử dụng truy vấn trong url bằng cách sử dụng:

System.Diagnostics.Process.Start("http://www.test.com?something=value"); 

nhưng giới hạn về lượng dữ liệu có thể gửi và các url lộn xộn đang ngăn cản tôi làm theo cách này. Tôi muốn sử dụng một bài đăng http cho điều này vì nó rõ ràng là phù hợp hơn. Tuy nhiên, các phương pháp tôi đã tìm thấy để làm điều này dường như không để mở trang trong trình duyệt sau khi nộp bài dữ liệu:

http://msdn.microsoft.com/en-us/library/debx8sh9.aspx

để tóm tắt; người dùng cần có thể nhấp vào nút trong ruy-băng outlook, mở trình duyệt web và hiển thị nội dung của email đã được gửi qua bài đăng.

EDIT:

Đúng vậy, tôi tìm thấy một cách để làm điều đó, nó khá fugly nhưng nó hoạt động! Chỉ cần tạo một tệp .html tạm thời (sau đó được khởi chạy như trên) chứa biểu mẫu có các trường ẩn cho tất cả dữ liệu và đã gửi nó trên trang tải với javascript.

Tôi không thực sự thích giải pháp này vì nó dựa trên javascript (tôi có một nút gửi chỉ trong trường hợp) và có vẻ như một chút của một nhà nghỉ, vì vậy tôi vẫn thực sự hy vọng một ai đó ở đây sẽ đưa ra một cái gì đó tốt hơn .

Trả lời

2

Tôi không chắc mình có thể xây dựng giải pháp theo cách đó hay không. Thay vào đó, tôi sẽ đăng tất cả dữ liệu lên dịch vụ web (sử dụng HttpWebRequest, như @Loci được mô tả hoặc chỉ nhập dịch vụ bằng Visual Studio), lưu trữ dữ liệu trong cơ sở dữ liệu (có thể có trạng thái đang chờ xử lý). Sau đó hướng người dùng (sử dụng phương thức Process.Start của bạn) đến một trang sẽ hiển thị vé trợ giúp đang chờ xử lý, cho phép họ phê duyệt hoặc hủy bỏ vé.

Nghe có vẻ giống công việc nhiều hơn một chút, nhưng nó sẽ làm sạch kiến ​​trúc của những gì bạn đang cố gắng làm. Ngoài ra, bạn có thêm lợi ích khi không lo lắng về cách kích hoạt một bài đăng biểu mẫu từ phía máy khách.

Edit:

Một plain ASMX web service ít nhất sẽ giúp bạn bắt đầu. Bạn có thể nhấp chuột phải vào dự án của bạn và chọn Thêm tham chiếu dịch vụ để tạo mã proxy để gọi dịch vụ.

+0

Cảm ơn! nhưng điều đó, thật không may là vượt ra ngoài tôi vào lúc này. Tôi sẽ làm một số nghiên cứu và xem nếu tôi có thể nhận được một cái gì đó như thế để làm việc và gửi kết quả của tôi. – Ben

+0

Đã cập nhật câu trả lời của tôi. – mgnoonan

+0

Tin vui! điều này không còn xa hơn tôi vì vậy tôi đã chấp nhận câu trả lời của bạn (4 năm muộn)! – Ben

2

Ứng dụng Dropbox thực hiện theo cách tương tự như bạn đã đề cập trong EDIT của mình. Nhưng nó cũng làm một số obfuscation, tức là nó XORs dữ liệu với hash được gửi qua URL.

Dưới đây là các bước như thế nào Dropbox thực hiện nó:

  1. trong ứng dụng: Tạo một mã thông báo có thể được sử dụng để cho phép tại dropbox.com.
  2. trong ứng dụng: Chuyển mã thông báo thành chuỗi hex (A).
  3. trong ứng dụng: Tạo một chuỗi hex ngẫu nhiên an toàn (B) có cùng độ dài.
  4. trong ứng dụng: Tính C = A XOR B.
  5. trong ứng dụng: Tạo file HTML tạm thời với các chức năng sau:
    1. Một trường nhập ẩn chứa giá trị B.
    2. Một nộp mẫu đơn với các trường nhập ẩn cần thiết để đăng nhập vào dropbox.com.
    3. Hàm JS đọc hàm băm từ URI, XOR nó bằng B và ghi kết quả vào các trường ẩn biểu mẫu gửi.
    4. Xóa băm từ URI.
    5. Gửi biểu mẫu.
  6. trong ứng dụng: Mở tệp HTML tạm thời bằng trình duyệt chuẩn và thêm C làm băm vào cuối URI.

Bây giờ nếu trình duyệt của bạn mở tệp HTML, nó tính toán mã thông báo xác thực từ trường nhập ẩn và mã băm trong URI và mở dropbox.com. Và vì Điểm 5.4. bạn không thể nhấn nút quay lại trong trình duyệt của mình để đăng nhập lại vì băm ist đã biến mất.

Các vấn đề liên quan