Multiple methods with different parameters WCF REST -
i've been given task implement following using wcf rest:
resource post put delete /device create new device list devices bulk update devices delete devices
this isn't problem per-se, problem these functions need different parameters. example, post method takes wsdevice, while method takes wscollectionquery parameter (used querying .. collections). 4 methods take different parameters, have accessible through /device uri.
this should possible in rest (according http://pages.apigee.com/web-api-design-ebook-thank-you-download.html?aliid=1911411 , got table in first place. see page 7).
what have:
[operationcontract, webinvoke(method = "post", responseformat = webmessageformat.json, bodystyle = webmessagebodystyle.wrapped, uritemplate = "/v" + rest_api_version + "/device/?device={device}")] wsresult devicepost(string sessionkey, wsdevice device); [operationcontract, webinvoke(method = "get", responseformat = webmessageformat.json, bodystyle = webmessagebodystyle.wrapped, uritemplate = "/v" + rest_api_version + "/device/?collectionquery={collectionquery}")] wsresult deviceget(string sessionkey, wscollectionquery collectionquery); [operationcontract, webinvoke(method = "put", responseformat = webmessageformat.json, bodystyle = webmessagebodystyle.wrapped, uritemplate = "/v" + rest_api_version + "/device/?devices={devices}")] wsresult deviceput(string sessionkey, wsdevice[] devices); [operationcontract, webinvoke(method = "delete", responseformat = webmessageformat.json, bodystyle = webmessagebodystyle.wrapped, uritemplate = "/v" + rest_api_version + "/device/")] wsresult devicedelete(string sessionkey); so i'd have same uritemplate, different outcome depending on passed parameters in message body. know added parameters above in uri, attempt differentiate between uri.
the error i'm getting following:
uritemplatetable not support multiple templates have equivalent path template '/v1/device/?device={device}' have different query strings, query strings cannot disambiguated via literal values. see documentation uritemplatetable more detail. i know why i'm receiving error. i'd know how else solve problem? i've looked @ having 1 function taking method = "*" works, can't access parameters other 1 passed in function.
if knows solution or can it's not possible if isn't, it'd much, appreciated!
edit: know can't pass complex types in get, that's issue can worked around.
probably best solution in case use same uritemplate 4 methods:
uritemplate = "/v" + rest_api_version + "/device/?device={device}&collectionquery={collectionquery}&devices={devices}" then can check necessary parameter in each case.
quite why doesn't throw ambiguous exception beats me however.
Comments
Post a Comment