如何在没有URI的情况下通过POST在WCF休息服务中发送数据

时间:2017-01-25 08:22:45

标签: c# .net rest wcf post

我是WCF的新手。我正在尝试实现一种用于身份验证的宁静服务。

我的WCF代码如下。

    [OperationContract]
    [WebInvoke(Method="POST", UriTemplate = "auth", RequestFormat=WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle=WebMessageBodyStyle.Wrapped)]
    Employee authEmployee(String username, String password);

我需要做的是获取用户名和密码而不通过URL接收。 我如何实现这一目标?

这可能是专家的基本问题,但我是新手。任何帮助表示赞赏。

感谢。

2 个答案:

答案 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; }
} 

作为旁注,如果您以这种方式以明文形式传递凭证,则不是特别安全。