将多个参数传递到WCF Web API服务

时间:2011-10-28 12:40:48

标签: wcf rest wcf-web-api

我想知道在创建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

1 个答案:

答案 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 佩德罗