我是WCF的新手。我正在尝试实现一种用于身份验证的宁静服务。
我的WCF代码如下。
[OperationContract]
[WebInvoke(Method="POST", UriTemplate = "auth", RequestFormat=WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle=WebMessageBodyStyle.Wrapped)]
Employee authEmployee(String username, String password);
我需要做的是获取用户名和密码而不通过URL接收。 我如何实现这一目标?
这可能是专家的基本问题,但我是新手。任何帮助表示赞赏。
感谢。
答案 0 :(得分:2)
为了清楚起见,我在这里重写我的评论。
您的客户端应通过创建请求和设置正确的请求字段来调用服务方法,例如
HttpWebRequest req =(HttpWebRequest)HttpWebRequest.Create(uri);
req.Method = "Post";
req.ContentType = "application/json";
byte[] bodyBytes = Encoding.UTF8.GetBytes("{\"Name\":\"John Doe\",\"Age\":33}");
req.GetRequestStream().Write(bodyBytes, 0, bodyBytes.Length);
req.GetRequestStream().Close();
当然
resp = (HttpWebResponse)req.GetResponse();
以这种方式,消费者必须传递值,但这些值不会直接通过网址
传播我认为方法名称是在URI中传递的,只有这个方法需要的属性才会在json中传递。
答案 1 :(得分:0)
{“action”:“Authenticate”,“attributes”:{“AccountName”:“admin”, “密码”:“密码”}}。这就是客户端发送数据的方式。所以 我的服务方法应该有3个参数吗?为行动, 帐号名和密码?
在这种情况下,您的服务操作应如下所示:
Employee authEmployee(string action, attributes attr);
将属性类型定义为:
class attributes
{
string AccountName { get; set; }
string Password { get; set; }
}
作为旁注,如果您以这种方式以明文形式传递凭证,则不是特别安全。