c# - WCF 休息服务 : How to make query parameters required and return HTTP 400 on wrong values?

标签 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 吗?当然,无需将类型更改为字符串并手动检查所有内容。

最佳答案

当您传递整数以外的内容时出现 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/

相关文章:

php - PDO 与 MYSQLI、准备语句和绑定(bind)参数

c# - Visual Studio 运行不需要的代码

c# - 在 Windows 窗体中是否有快速操作和缓冲屏幕的方法?

arrays - 如何为采用单个数组参数的构造函数调用 New-Object?

c# - 将关系数据库存储为 XML

c# - 为什么 Fiddler 会修复我与 WCF 服务器的连接问题?

JavaScript 和 jQuery 函数参数错误

c# - 遍历 MultiSelectList

c# - Entity Framework 中的复杂动态查询

wcf - 如何使用 silverlight 应用程序中的遗留业务逻辑?