I’m developing a web application which is required to call a custom registered protocol on the clients computer. Currently I do a GET to the protocol, which then passes the parameters via the querystring.
Is it possible to do a POST to a custom registered protocol and if so how would I go about extracting the header information within CustomProtocol.exe?
This is my current GET solution
To Initiate the call from javascript
Custom://startup?Function=DoSomething&Value1=Test&Value2=Test
The custom protocol that I registered onto my machine.
[HKEY_CLASSES_ROOT\Custom\shell\open\command]
@="\"CustomProtocol.exe\" \"%1\""
I then compiled the below code to generate the CustomProtocol.exe. During execution the URI is passed into the Main method, I then extract the querystring.
namespace CustomProtocol
{
class Program
{
static void Main(string[] args)
{
// Get the querystring from the URI being passed in
// Business code...
}
}
}
EDIT 1:
This is the header when doing a post to the custom registered protocol. The protocol only has 1 arg passed into it just like the GET which is the URI. Somehow if I only were able to access the header information…
Request URL:http://localhost/CustomWebInvoker/Default.aspx Request Headersview source Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Content-Type:application/x-www-form-urlencoded Origin:http://localhost Referer:http://localhost/CustomWebInvoker/Default.aspx User-Agent:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.78 Safari/535.11 Form Dataview URL encoded
__VIEWSTATE:/wEPDwUKMTkxMDU5NzI4OWRkBWZZppW219Muku6ZjiGZLQG5um8=
__EVENTVALIDATION:/wEWCwKz9d77DAK57evuBgLk0vuTDALl+pjzDQKB8r3PAQKk+8X1CwLLneGNCgK2gO/LCAK355HvBAKAseegDAL+ovbYDMmmPuTHB0XbFjGRG9Wl1ij5kObV
dlLanguage:English
dlApplicationMode:UpdateMode
dlCallingApplication:CSS
dlCentre:EasternCompCenter
btnFastPath:Fast Path
NO – any custom protocol handler is basically getting its information via the commandline… there is no way to map a POST to the commandline… IF you really need to do this I recommend implementing this as a http-based webservice (WCF, SOAP/REST)…