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 吗?当然,无需将类型更改为字符串并手动检查所有内容。
最佳答案
当您传递整数以外的内容时出现 500 错误的原因是 WCF 尝试将传递的值解析为整数,并且在这个阶段您的请求已经收到并已开始由服务进行处理。
仅当消息在 channel 上并且 WCF 不理解传入消息的消息格式并且它需要按照服务指定的方式进行转换时,才会出现 400 错误。
为了检查您的值并返回 400 错误,请尝试使用“MessageInspectors”,其中您有 IDispatcherMessageInspector 的“AfterReceiveRequest”等方法。可以找到有关消息检查器的一些信息 here .
关于c# - WCF 休息服务 : How to make query parameters required and return HTTP 400 on wrong values?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8960927/