WCF Rest服务POSTS在本地IIS上但不在服务器上(GET在两者中都有效)
问题描述:
我有一个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
任何想法如何解决这个问题?
答
只有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)
{
...
}
我会给第二个选项一试。我已经更新了我的问题,以便更清楚地了解服务器和开发计算机之间的作用和不作用。 – ginalster
我不知道这是如何工作在您的本地IIS上,因为您无法在Post请求中传递多个参数,以及正文(大写)和函数(小写)之间的参数名称不同。 –
第二个选项与DataContract和DataMember是修复。 – ginalster