使用http post调用restful wcf服务时出现http 400错误
我已经设置了wcf服务。不幸的是,当我通过fiddler、web或其他任何方式调用该服务时,我得到一个http 400错误。我真不知道从哪里着手解决这个问题。如有任何建议,我们将不胜感激。WSDL目前不是一个选项。休息是一项要求。我以前可以使用GET进行调用,但是,GET不安全,因为我需要传递用户ID和密码进行验证,这很容易查看 wcf服务具有以下接口:使用http post调用restful wcf服务时出现http 400错误,wcf,rest,post,Wcf,Rest,Post,我已经设置了wcf服务。不幸的是,当我通过fiddler、web或其他任何方式调用该服务时,我得到一个http 400错误。我真不知道从哪里着手解决这个问题。如有任何建议,我们将不胜感激。WSDL目前不是一个选项。休息是一项要求。我以前可以使用GET进行调用,但是,GET不安全,因为我需要传递用户ID和密码进行验证,这很容易查看 wcf服务具有以下接口: [WebInvoke(UriTemplate = "/Login", Method="POST", Response
[WebInvoke(UriTemplate = "/Login", Method="POST",
ResponseFormat = WebMessageFormat.Xml,
BodyStyle = WebMessageBodyStyle.Wrapped)]
[OperationContract]
bool Login(string UserName, string PassWord, string AppKey);
该服务具有以下代码。是的,这个代码是不完整的,我知道AppKey真的什么都不做,它在这里作为一个占位符
public bool Login(string UserName, string PassWord, string AppKey)
{
bool bl = false;
if (String.IsNullOrEmpty(AppKey))
{
throw (new ApplicationException(AppKeyNull));
}
if (Membership.ValidateUser(UserName, PassWord))
{
bl = true;
}
return (bl);
}
我想通过fiddler打电话给服务部。我有以下网址:
http://127.0.0.1:82/WebServices/RemoteAPI.svc/Login
我有以下标题设置:
User-Agent: Fiddler
Host: 127.0.0.1:82
Content-Length: 46
Content-Type: application/x-www-form-urlencoded
我有以下身体设置:
UserName=xxxxxx&PassWord=yyyyyy&AppKey=blah
如果由于某种原因您自己计算内容长度,则可能会发生400错误。可能需要更多信息,如http请求的全文。这是传递给REST服务的有效数据格式吗 我只能假设您正在使用: 您没有指定支持XML和JSON的RequestFormat。您的正文既不是JSON也不是XML。请查看相关帮助。或者,您可以在实现方法中接受流参数,并使用HttpUtility.ParseQueryString实用程序从发布的正文中解析查询字符串值。尝试一下: 将方法签名和属性更改为此
[WebInvoke(UriTemplate = "/Login", Method = "POST", ResponseFormat = WebMessageFormat.Xml, RequestFormat= WebMessageFormat.Xml)]
[OperationContract]
bool Login(LoginContract loginInfo);
然后添加一个新的数据合同LoginContract
[DataContract]
public class LoginContract
{
[DataMember]
public string UserName { get; set; }
[DataMember]
public string PassWord { get; set; }
[DataMember]
public string AppKey { get; set; }
}
然后,当您使用Fiddler发布时,请指定内容类型:text/xml
并将其用作您的请求主体
<LoginContract xmlns="http://schemas.datacontract.org/2004/07/YourAppName" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<AppKey>blah</AppKey>
<PassWord>testpwd</PassWord>
<UserName>test</UserName></LoginContract>
检查请求标题中是否缺少“内容类型”?谢谢您的建议。我手工计算了内容长度,也得到了46。我让费德勒自己算了算。不幸的是,这并没有解决这个问题。json和xml是唯一受支持的格式吗?我认为它们适用于复杂的对象。
{ "AppKey": "blah", "PassWord": "testpwd", "UserName": "test" }
User-Agent: Fiddler
Host: localhost:8889
Content-Length: 113
**Content-Type: text/xml**