我想知道在创建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。那么旧版本如何真正起作用?我有什么方法可以恢复这种行为吗?
祝你好运 的Jesper
答案 0 :(得分:0)
1)定义一个包含您想要接收的数据的类,即
public class Model
{
public string x { get; set; }
public int y { get; set; }
public double z { get; set; }
}
2)将操作参数定义为ObjectContent<Model>
public HttpResponseMessage Post(ObjectContent<Model> c){
Model m = c.ReadAs();
...
}
HTH 佩德罗