2017-10-12 56 views
1

我有一个WCF服务,我已经添加了RESTful支持。 GET/POST在我的本地IIS上运行。但是在服务器上的帖子给我了以下错误:WCF Rest服务POSTS在本地IIS上但不在服务器上(GET在两者中都有效)

The incoming HTTP request's URI ' http://myserver:9002/StudyService.svc/rest/RestAuthenticateUser ' does not match any service operation.

[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

任何想法如何解决这个问题?

回答

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) 
{ 
    ... 
} 
+0

我会给第二个选项一试。我已经更新了我的问题,以便更清楚地了解服务器和开发计算机之间的作用和不作用。 – ginalster

+1

我不知道这是如何工作在您的本地IIS上,因为您无法在Post请求中传递多个参数,以及正文(大写)和函数(小写)之间的参数名称不同。 –

+0

第二个选项与DataContract和DataMember是修复。 – ginalster

相关问题