我想知道创建 WCF-Web 服务时发生的幕后魔术。
在一个旧项目中,我得到了可以从 JavaScript 调用的方法,如下所示
[OperationContract]
[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
IEnumerable<Result> SearchObjects(string x, int y, double z);
这在我从 JavaScript 发送 { "x": "something", "y": 1, "z": 1.5 } 时有效。
在创建该 Web 服务几个月后,我找到了 WCF Web API 并尝试制作类似的东西。
不同之处在于我使用 HttpServiceHostFactory() 在 Global.asax 中创建了路由
现在,当我尝试调用该方法时,我得到了这样的异常
异常详细信息:System.InvalidOperationException:HttpOperationHandlerFactory 无法确定应与服务操作“Invoke_LoginRequest”的请求消息内容相关联的输入参数。如果操作不期望请求消息中的内容,请使用 HTTP GET 方法进行操作。否则,请确保一个输入参数的 IsContentParameter 属性设置为“True”,或者是可分配给以下之一的类型:HttpContent、ObjectContent 1, HttpRequestMessage or HttpRequestMessage
1。
为了让它工作,我需要声明这样的方法(VB.Net)
Public Function Invoke_LoginRequest(ByVal request As HttpRequestMessage(Of JsonValue)) As HttpResponseMessage(Of String)
但后来我需要手动解析 JsonValue 。那么旧版本究竟是如何工作的呢?有什么办法可以让我恢复这种行为吗?
最好的问候杰斯珀