WCF REST服务:如何使查询参数成为必需的,并在错误的值上返回HTTP400

本文关键字:错误 HTTP400 返回 服务 REST 何使 查询 参数 WCF | 更新日期: 2023-09-27 18:21:08

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返回HTTP500。我可以返回HTTP 400吗?当然,不需要将类型更改为字符串并手动检查所有内容。

WCF REST服务:如何使查询参数成为必需的,并在错误的值上返回HTTP400

传递整数以外的值时出现500错误的原因是WCF试图将传递的值解析为整数,而在这个阶段,您的请求已经收到,并且已经启动以供服务处理。

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

为了检查您的值并返回400错误,请尝试使用"MessageInspectors",其中您有IDispatcherMessageInspector的"AfterReceiveRequest"等方法。有关消息检查器的一些信息可以在这里找到。

您可以使用字符串而不是int,然后执行自己的验证和类型强制(如果不通过,字符串将为null)。如果参数不正确,则可以返回400