发送带有对象参数的PUT请求(.NET WCF服务)

时间:2018-08-15 15:16:30

标签: c# object post web service

所以,这是我的问题。

我目前正在使用WCF REST服务,现在需要实现一种方法,该方法允许我创建一个帐户(用户帐户)。这次在网络上搜索并没有帮助我,这就是为什么我要问一个真正了解我的意思的人x)。

所以,这是我的方法:

[WebInvoke(Method = "PUT", UriTemplate = "users/{username}", 
    RequestFormat = WebMessageFormat.Xml)]
    [OperationContract]
    void PutUserAccount(string username, User u)
    {
        Debug.WriteLine("Entering method [PutUserAccount]");
        // Check if user exists
        User user = DBManager.FindUser(username);
        if (user == null)
        {
            try
            {
                //Create or update new user
                u.Id = GetUserLink(username);
                u.Notes = GetUserNotesLink(username);
                u.BlackListed = false;
                DBManager.AddUser(u);

                // Set status to created and include new URI in Location 
                //header
                WebOperationContext.Current.OutgoingResponse.SetStatusAsCreated(GetUserProfile(username).Id);
            }
            catch (Exception e)
            {
                Debug.WriteLine("_PutUserAccount || Exception [" + e.Message + "]");
            }
        }
        else if (!DBManager.IsUserAuthorized(username, WebOperationContext.Current))
        {
            Debug.WriteLine("_PutUserAccount - 1. This user isn't allowed to add users");
            WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.Unauthorized;
            return;
        }
    }

这是我的“用户”类:

[DataContract]
class _User
{
    [DataMember]
    public string Id { get; set; }
    [DataMember]
    public string Username { get; set; }
    [DataMember]
    public string Password { get; set; }
    [DataMember]
    public string Name { get; set; }
    [DataMember]
    public string Email { get; set; }
    [DataMember]
    public string Notes { get; set; }
    [DataMember]
    public bool BlackListed { get; set; }
}

问题是:我无法执行任何填充“用户u”的请求,它总是返回以下异常:

Exception thrown: 'System.InvalidOperationException' in 
System.ServiceModel.Web.dll
Exception thrown: 'System.InvalidOperationException' in 
System.ServiceModel.dll
Exception thrown: 'System.InvalidOperationException' in 
System.ServiceModel.dll
Exception thrown: 'System.InvalidOperationException' in 
System.ServiceModel.dll

有我的POSTMAN请求: 输入请求:http://172.20.131.13/TDT/users/ {RandomUser} 而我的XML正文:

<User>
    <Id>something</Id>
    <Username>RandomUser</Username>
    <Password>1234</Password>
    <Name>Random User</Name>
    <Email>random.user@randomemail.com</Email>
    <Notes>http://www.random-link.com</Notes>
    <BlackListed>false</BlackListed>
</User>

我的问题是,我如何构建将用户传递给我的服务的请求?

P.S。 :我正在使用邮递员来测试我的代码。

1 个答案:

答案 0 :(得分:0)

好吧,经过很多努力,我设法做到了。我要做的就是在“ User xmlns”中添加对象的名称空间,然后将数据按正确的顺序放置。这是我的工作要求:

<User xmlns="http://schemas.datacontract.org/2004/07/namespace.lib.Objects" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
    <BlackListed>false</BlackListed>
    <Email>okabe.rintarou@achannel.com</Email>
    <Id></Id>
    <Name>Okabe Rintarou</Name>
    <Notes></Notes>
    <Password>1234</Password>
    <Username>Kyouma</Username>
</User>

已经1个星期了,我一直很愚蠢。

谢谢