วันพุธที่ ๒๔ กุมภาพันธ์ พ.ศ. ๒๕๕๓

ส่ง URL Parameter ให้ ClickOnce Application

ผมเคยเขียน blog เรื่อง สั่งรัน Win App บนเครื่อง Client เมื่อเดือนธันวาคม 2009 แล้วก็ติดเรื่องส่ง paramenter ให้ ClickOnce application เอาไว้ครับ วันนี้มีโอกาสก็เลยมาเขียนเรื่องนี้ซะเลย

ก่อนอื่นเราก็มาสร้าง Console Application สำหรับการทดสอบซะก่อนครับ จากนั้นก็ Add .NET Reference เข้ามาในโปรเจคเรา 2 ตัว คือ System.Deployment กับ System.Web ครับ แล้วก็เขียนโค้ด Import NameSpace ที่จำเป็นเข้าในด้วย


Imports System.Collections.Specialized
Imports System.Deployment.Application
Imports System.Web

Module Module1

Sub Main()
Dim params = GetURLParameter()
If params.Count > 0 Then
For i As Integer = 0 To params.Count - 1
Console.WriteLine("Parameter {0} is {1}", params.Keys(i), params.Item(i))
Next
Else
Console.WriteLine("No URL Parameter")
End If
Console.WriteLine("Press any key to quit.")
Console.ReadLine()

End Sub

Private Function GetURLParameter() As NameValueCollection
Dim NameValueTable As New NameValueCollection

If (My.Application.IsNetworkDeployed) Then
Dim QueryString As String = ApplicationDeployment.CurrentDeployment.ActivationUri.Query
NameValueTable = HttpUtility.ParseQueryString(QueryString)
End If

Return NameValueTable
End Function

End Module


โค้ดที่ใช้ทดสอบมีเท่านี้ ไม่ยากใช่ไหมครับ แต่ที่สำคัญอีกอย่างหนึ่งก็คือ เราต้องกำหนดให้ ClickOnce Application ของเราสามารถรับ URL Parameters ได้ก่อน โดยไปที่ Property ของโปรเจค แล้วเลือก Publish Tab ครับ



ทีนี้เราจะเห็นปุ่ม OPTIONS กดเข้าไปได้เลยครับ



แล้วก็ทำการเลือก Manifests และคลิ๊กเครื่องหมายถูกตรง Allow URL parameters

เสร็จแล้วก็ทำการ Publish ครับ ทีนี้เรามาลองทดสอบเรียก ClickOnce Application แบบไม่ส่ง parameter ก่อน



โปรแกรมขึ้นว่า No parameter ถูกต้อง คราวนี้ลองทดสอบแบบส่ง QueryString ไปด้วย
(http://nithi/COParameter/CoParameter.application?param1=test1&param2=test2&name=nithi)



เรียบร้อยครับ คราวนี้เราก็สามารถส่ง URL Parameter ไปให้ Application ของเราได้แล้วครับ

Reference:
How to: Retrieve Query String Information in a ClickOnce Application

1 ความคิดเห็น:

ไม่ระบุชื่อ กล่าวว่า...

วิธีส่งแบบนี้ เป็นการส่งแบบ Method GET ไปตาม URL ถ้าหากต้องการส่งแบบ Method POST สามารถทำได้หรือเปล่าครับ