在 wcf rest 中发送 xml 请求时出现错误请求 400

Posted

技术标签:

【中文标题】在 wcf rest 中发送 xml 请求时出现错误请求 400【英文标题】:Bad request 400 on sending xml request in wcf rest 【发布时间】:2011-01-10 17:54:51 【问题描述】:

我正在编写一个使用 wcf rest 进行身份验证的示例应用程序。这是代码的快照:

服务接口:

[ServiceContract]
public interface IAuthenticate

    [OperationContract]
    [WebInvoke(BodyStyle=WebMessageBodyStyle.Bare, 
Method = "POST", UriTemplate = "/VUser",RequestFormat= WebMessageFormat.Xml ), ]
    string CreateUser(VUser user);

数据合约类:

[DataContract]
public class VUser

    public VUser()
    
    

    [DataMember]
    public string NickName  get; set; 

    [DataMember]
    public string lName  get; set; 

    [DataMember]
    public string fName  get; set; 

    [DataMember]
    public string Email  get; set; 

    [DataMember]
    public string PhoneNumber  get; set; 

    [DataMember]
    public string Password  get; set; 

    [DataMember]
    public string Gender  get; set; 

    [DataMember]
    public int CountryCode  get; set; 

服务类:

public class Authenticate : IAuthenticate


    #region IAuthenticate members
    public string CreateUser(Vuser user)
    
        //processing xml for response

    
    #endregion IAuthenticate

客户端代码:

       Uri baseAddress = new Uri("http://localhost:8000");

        using (WebServiceHost host = new WebServiceHost(typeof(Authenticate), baseAddress))
        
            host.Open();
            Console.WriteLine("Press any key to terminate");
            Console.ReadLine();
            host.Close();

        

现在我使用 fiddler 在 host.open() 之后发送请求并发送请求显示:

发帖http://localhost:8000/Vuser/

用户代理:提琴手 主机:本地主机:8000 内容长度:233 内容类型:文本/xml

在请求正文中:

沙 r 苏尼尔 苏尼尔 919900101948 冬天 男性 01

但它返回给我 HTTP/1.1 400 错误请求。我的问题是我是否将 vuser 类正确传递给 create user 方法,或者是否有任何其他方式来发送 vuser。

请帮帮我。

【问题讨论】:

请检查这个问题:***.com/questions/3372335/… 【参考方案1】:

这可能是序列化的问题。

序列化使用默认构造函数,不带参数。

在 C# 中,编译器会自动创建一个默认构造函数,除了如果你创建一个带参数的构造函数。

Authenticate 类缺少默认构造函数,因此您将有问题通过 WCF 发送它。

【讨论】:

hi shiraz 我也创建了一个默认构造函数,但它仍然是同样的错误......【参考方案2】:

请在 DataContract 类中指定 Datacontract 命名空间

[DataContract(Namespace = "http://xxx.xxx.xxx/Service.svc")]

并在 Xml 文件中遵循相同的操作

【讨论】:

【参考方案3】:

客户端和服务器中的命名空间应该匹配。尝试将命名空间名称添加为

[DataContract(Namespace = "http://sample.com")]
public class VUser

在服务器合同中。然后确保 xml 字符串具有相同命名空间的 xmlns 值

"<VUser xmlns=\"http://sample.com" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">...</VUser>"

【讨论】:

以上是关于在 wcf rest 中发送 xml 请求时出现错误请求 400的主要内容,如果未能解决你的问题,请参考以下文章

将 JSON 数据从 JQuery 发送到 WCF REST 方法时出现问题

带有参数的 Wcf Restful 服务发布用户名

WCF REST:期望我的 XML 在请求中看起来像啥?

尝试 GET 时出现 WCF REST 404

WCF RESTful 服务:如何在 POST 请求中发送长字符串参数?

尝试使用 json.net 和 WCF Rest Service 将 XML 转换为 JSON 输出时出现反斜杠问题