C# 在WCF rest服务中如何在没有URI的情况下通过POST发送数据
我是WCF的新手。我正在尝试实现用于身份验证的restful服务 我的WCF代码如下C# 在WCF rest服务中如何在没有URI的情况下通过POST发送数据,c#,.net,rest,wcf,post,C#,.net,Rest,Wcf,Post,我是WCF的新手。我正在尝试实现用于身份验证的restful服务 我的WCF代码如下 [OperationContract] [WebInvoke(Method="POST", UriTemplate = "auth", RequestFormat=WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle=WebMessageBodyStyle.Wrapped)] Employee a
[OperationContract]
[WebInvoke(Method="POST", UriTemplate = "auth", RequestFormat=WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle=WebMessageBodyStyle.Wrapped)]
Employee authEmployee(String username, String password);
我在这里需要做的是在不通过URL接收的情况下获取用户名和密码。
我如何做到这一点
这可能是专家们的一个基本问题,但我对这一点还不熟悉。感谢您的帮助
谢谢
{“操作”:“身份验证”,“属性”:{“帐户名”:“管理员”,
“密码”:“密码”}。这就是客户端发送数据的方式。所以
我的服务方法中应该有3个参数吗?为了行动,
帐户名和密码
在这种情况下,您的服务操作应如下所示:
Employee authEmployee(string action, attributes attr);
将属性类型定义为:
class attributes
{
string AccountName { get; set; }
string Password { get; set; }
}
顺便说一句,如果您以这种方式以明文形式传递凭据,那么它并不特别安全
{“操作”:“身份验证”,“属性”:{“帐户名”:“管理员”,
“密码”:“密码”}。这就是客户端发送数据的方式。所以
我的服务方法中应该有3个参数吗?为了行动,
帐户名和密码
在这种情况下,您的服务操作应如下所示:
Employee authEmployee(string action, attributes attr);
将属性类型定义为:
class attributes
{
string AccountName { get; set; }
string Password { get; set; }
}
顺便说一句,如果您以这种方式以明文形式传递凭据,则不会特别安全。为了清晰起见,我将在此处重写我的注释
例如,客户端应该通过创建请求和正确设置请求字段来调用服务方法
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();
这样,消费者必须传递值,但这些值不会直接通过url传递
我认为方法名是在URI中传递的,只有该方法需要的属性才在json中传递 为了清晰起见,我将在这里重写我的评论
例如,客户端应该通过创建请求和正确设置请求字段来调用服务方法
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();
这样,消费者必须传递值,但这些值不会直接通过url传递
我认为方法名是在URI中传递的,只有该方法需要的属性才在json中传递 我很确定,如果您使用HttpWebRequest req=(HttpWebRequest)HttpWebRequest.Create(uri)调用您的服务;然后您需要uri,但在设置方法时,用户名和密码不会随uri一起传递;这是否意味着,消费者不需要在URI中传递值,但我将在用户名和密码变量中获取值??您的客户端应该通过创建请求并正确设置请求字段来调用服务方法,例如HttpWebRequest req=(HttpWebRequest)HttpWebRequest.Create(URI);requ.methodos=“Post”;req.ContentType=“应用程序/json”;byte[]bodyBytes=Encoding.UTF8.GetBytes(“{\'Name\':\'johndoe\',\'Age\':33}”);req.GetRequestStream().Write(bodyBytes,0,bodyBytes.Length);req.GetRequestStream().Close();这样,使用者必须传递值,但值不会直接通过url{“操作”:“身份验证”,“属性”:{“帐户名”:“管理员”,“密码”:“密码”}}传递。这就是客户端发送数据的方式。那么我的服务方法中应该有3个参数吗?对于操作,AccountName和Password?@PawełSwajdo您应该发布一个答案而不是评论。我很确定如果您使用HttpWebRequest req=(HttpWebRequest)HttpWebRequest.Create(uri)调用您的服务;然后您需要uri,但在设置方法时,用户名和密码不会随uri一起传递;这是否意味着,消费者不需要在URI中传递值,但我将在用户名和密码变量中获取值??您的客户端应该通过创建请求并正确设置请求字段来调用服务方法,例如HttpWebRequest req=(HttpWebRequest)HttpWebRequest.Create(URI);requ.methodos=“Post”;req.ContentType=“应用程序/json”;byte[]bodyBytes=Encoding.UTF8.GetBytes(“{\'Name\':\'johndoe\',\'Age\':33}”);req.GetRequestStream().Write(bodyBytes,0,bodyBytes.Length);req.GetRequestStream().Close();这样,使用者必须传递值,但值不会直接通过url{“操作”:“身份验证”,“属性”:{“帐户名”:“管理员”,“密码”:“密码”}}传递。这就是客户端发送数据的方式。那么我的服务方法中应该有3个参数吗?关于操作、帐户名和密码?@PawełSwajdo您应该发布答案而不是评论。谢谢。我试试这个谢谢。我试试这个