【发布时间】:2016-01-05 23:20:07
【问题描述】:
我是 WCF 休息服务的新手。我正在尝试实现 PUT 方法,该方法将从客户端获取 JSON 输入
将此视为我的网址正文:
{"73":"456212c5-149c-4f04-a41d-47eeb8feee01","74":"4825c4be-2f58-4021-88b1-a5dcd17079b5"}
我已经实现了以下代码
[OperationContract]
[WebInvoke(Method = "PUT", BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "/ListOfAlerts", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
void CloseAlert(String alertIDsToClose);
在服务:
SCOM_ConnectionSettings();
Guid alertId = Guid.Empty;
//StreamReader streamReader = new StreamReader(alertIDsToClose);
//streamReader.
Dictionary<string, string> alertIDs = JsonConvert.DeserializeObject<Dictionary<string, string>>(alertIDsToClose);
#region test
//String str = WebOperationContext.Current.IncomingRequest.Accept.ToString();
//StreamReader reader = new StreamReader(alertIDs);
//String res = reader.ReadToEnd();
//NameValueCollection coll = HttpUtility.ParseQueryString(res);
//foreach(string alertID in alertIDs)
//{
#endregion
foreach (KeyValuePair<string, string> alertID in alertIDs)
{
alertId = new Guid(alertID.Value);
}
MonitoringAlert monitoringAlert = mgGroup.GetMonitoringAlert(alertId);
ReadOnlyCollection<MonitoringAlertResolutionState> alertStates = mgGroup.GetMonitoringAlertResolutionStates();
MonitoringAlertResolutionState closedState = null;
foreach (MonitoringAlertResolutionState thisState in alertStates)
{
if (thisState.Name == "Closed")
{
closedState = thisState;
}
}
if (monitoringAlert.ResolutionState != closedState.ResolutionState)
{
monitoringAlert.ResolutionState = closedState.ResolutionState;
string comment = "closing availability alert";
monitoringAlert.Update(comment);
}
}
我如何指定 json 数据在 body 中而不是在 url 中可用。我的函数是如何从 Body 中读取数据的。我在正确的轨道上吗?
请给我建议...
【问题讨论】:
-
我没有完全理解您的问题...如果您尝试将该 json 作为参数发送,则无需转换或拆分值,您可以使用类,甚至对于您发布的 json,您应该在方法中收到一个字符串对,如下所示: CloseAlert(Dictionary
obj) -
如果我将它作为一个主体获取,我应该如何获取。我的函数如何知道它应该从主体获取而不是从路径值/请求参数获取。我想指定任何属性?你能给任何例子。
-
由于执行的操作类型,您的函数开始了解 Body 数据。如果 HTTP 方法是 POST/PUT,则客户端需要将请求正文中的数据上传到 Url。 WCF 在内部处理它,您无需担心。
标签: .net wcf json.net wcf-rest