WCF REST服务:如何使查询参数成为必需并返回错误值的HTTP 400?

时间:2012-01-22 12:08:37

标签: c# wcf parameters wcf-rest

1。必需参数

在以下示例URI定义

[WebGet(UriTemplate = "GetData?value={value}")]
[OperationContract]
string GetData(int value);
{
    return string.Format("You entered: {0}, value);
}

“value”参数默认是可选的,如果我没有传递它(调用http://baseAddress/GetData),变量将填充为零。

是否有任何简单的方法可以使这个参数,可能是一个属性?我找到的唯一方法是手动检查WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters["value"] != null

2。格式错误的HTTP 400

我讨厌的另一件事是为/GetData?value=emptyOrAnythingThatIsNotAnInteger返回HTTP 500。我可以返回HTTP 400吗?当然,无需将类型更改为字符串并手动检查所有内容。

2 个答案:

答案 0 :(得分:1)

您可以使用字符串而不是int,然后执行自己的验证并输入强制(如果未传递,则字符串将为null)。然后,如果参数不正确,您可以返回400

答案 1 :(得分:1)

传递除整数以外的值时出现500错误的原因是WCF尝试解析传递给整数的值,并且在此阶段您的请求已被接收并已启动以供服务处理。

只有当消息在通道上并且WCF不理解传入消息的消息格式并且它需要按照服务的指定进行转换时,才会收到400错误。

为了检查你的值并返回400错误,请尝试使用“MessageInspectors”,其中有IDispatcherMessageInspector的“AfterReceiveRequest”方法。可以找到有关消息检查器的一些信息here