Reputation: 9620
I'm writing a .NET client for Menalto Gallery 3, which uses a RESTful JSON API (see API docs). I decided to use WCF for my client and it looks like it could greatly simplify my work, were it not for the fact that there's one method that requires a Content-Type of application/x-www-form-urlencoded
instead of application/json
.
I have seen various hacks to send urlencoded data from WCF, for example by using a Stream parameter which enables me to send arbitrary data, but still requires an IClientMessageInspector
to set the Content-Type:
internal class GalleryClientMessageInspector : IClientMessageInspector {
public object BeforeSendRequest(ref Message request, IClientChannel channel) {
HttpRequestMessageProperty httpRequestMessage =
getOrAddRequestMessageProperty(request);
if (/* this is the one API method using urlencoded data */) {
httpRequestMessage.Headers["Content-Type"] = "application/x-www-form-urlencoded";
}
}
// ...remaining IClientMessageInspector methods...
}
As you can see, my problem in this case is that the IClientMessageInspector does not know from which method the message originated (so I can't look for a UrlEncoded
attribute or something that tells me to use the urlencoded format in this case).
How would one add support for urlencoded messages in WCF without resorting to such hacks?
Ideally, I'd want to just decorate my method declaration with an attribute and hook some inspector, encoder, formatter or whatever into WCF that will find this attribute and urlencode the method's parameters instead of serializing them to JSON, eg.
[
OperationContract,
WebInvoke(UriTemplate = ""),
OverrideMessageFormat(CustomMessageFormat.UrlEncoded) // like this
]
string Login(string user, string password);
Upvotes: 2
Views: 7640
Reputation: 364409
Form posts are not supported by default (content type is not supported) but WCF Samples provides two examples related to this topic:
There is also WCFRestContrib project which offers support for form posts. Old Rest Starter Kit also had support for form posts bur REST Starter Kit has never passed community preview. For last upcoming Web-API (it will be the part of future WCF version) support working with forms as well. At the moment Web-API is available as CTP1.
Upvotes: 3