WCF Rest服务POSTS在本地IIS上,但不在服务器上(GET适用于两者)

时间:2017-10-12 20:39:13

标签: c# wcf post

我有一个WCF服务,我已经添加了RESTful支持。 GET / POST适用于我的本地IIS。但是在服务器上,POSTS给出了以下错误:

  

传入的HTTP请求的URI“http://myserver:9002/StudyService.svc/rest/RestAuthenticateUser”与任何服务操作都不匹配。

[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/RestAuthenticateUser", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    authResultDTO RestAuthenticateUser(AuthRequest authRequest);

public authResultDTO RestAuthenticateUser(AuthRequest authRequest)
{
    ...
}

我通过邮递员发帖:http://myserver:9002/StudyService.svc/rest/RestAuthenticateUser

content-type: application/json
body: raw      JSON
{
    "DomainName": "Local",
    "UserID": "myuser",
    "Password": "mypassword"
}

我正在调查服务器上的.net安装。我在想,这可能更像是一个环境问题而不是编码?

目标框架:.Net Framework 4.5

知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

只有GET方法允许多个参数,POST只允许一个参数作为请求的主体传递。

您要么传递URI字符串

中的一些参数
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/RestAuthenticateUser/{userID}/{password}/{applicationId}", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    authResultDTO RestAuthenticateUser(AuthRequest authRequest);

public authResultDTO AuthenticateUser(string domainName, string userID, string password, string applicationId)
{
    ...
}

或者您使用数据合同

[DataContract(Namespace="http://yournamespace.com")]
public class MyContract
{
   [DataMember(Order=1)]
   public string DomainName { get(); set{};}

   [DataMember(Order=2)]
   public string UserID { get(); set{};}

   ...
}

[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/RestAuthenticateUser", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    authResultDTO RestAuthenticateUser(AuthRequest authRequest);

public authResultDTO AuthenticateUser(MyContract contract)
{
    ...
}