Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wcf Fiddler2中POST方法的请求主体_Wcf - Fatal编程技术网

Wcf Fiddler2中POST方法的请求主体

Wcf Fiddler2中POST方法的请求主体,wcf,Wcf,方法调用在没有请求主体的情况下成功。当我使用下面的请求体时,我得到HTTP/1.1400错误请求。您是否发现下面的请求主体有任何明显的问题 请求主体 { "_userConfigData":{"UserName":"bXZpbmphbXVyaQ==", "FirstName":"User1", "LastName":"Last1", "ContactInfo":"None" }, "_configResult": "Miscellaneous" } 请求头 User-Age

方法调用在没有请求主体的情况下成功。当我使用下面的请求体时,我得到HTTP/1.1400错误请求。您是否发现下面的请求主体有任何明显的问题

请求主体

{ 
    "_userConfigData":{"UserName":"bXZpbmphbXVyaQ==", "FirstName":"User1", "LastName":"Last1", "ContactInfo":"None" }, 
    "_configResult": "Miscellaneous"
}
请求头

User-Agent: Fiddler
Content-Type: application/json
Host: localhost:1706
Content-Length: 167
以下是服务器端方法:

[OperationContract]
[WebInvoke(UriTemplate = "UpdateUserDetails/?_clientIP={_clientIP}&AdminName={AdminName}", Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)] 
public void UpdateUserDetails(UserConfigData _userConfigData, ConfigResult _configResult, string _clientIP, string AdminName)
{
    // 
}
[WebInvoke(UriTemplate = "UpdateUserDetails", Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
public void UpdateUserDetails(Result result)
{
    //
}
以下是我与Fiddler2一起使用的URL:


谢谢,

我能够让你的代码正常工作,但我不得不做一些修改

  • 我必须将查询字符串携带的数据移动到主体本身,否则它就无法工作
  • 我不得不放弃紧身衣的选择
  • 无论如何,以下是已更新的模型对象及其数据:

    public class UserConfigData
    {
        public string UserName { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string ContactInfo { get; set; }
    }
    
    public class Result
    {
        public UserConfigData UserConfigData { get; set; }
        public string ConfigResult { get; set; }
        public string ClientIp { get; set; }
        public string AdminName { get; set; }
    }
    
    服务器端方法:

    [OperationContract]
    [WebInvoke(UriTemplate = "UpdateUserDetails/?_clientIP={_clientIP}&AdminName={AdminName}", Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)] 
    public void UpdateUserDetails(UserConfigData _userConfigData, ConfigResult _configResult, string _clientIP, string AdminName)
    {
        // 
    }
    
    [WebInvoke(UriTemplate = "UpdateUserDetails", Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
    public void UpdateUserDetails(Result result)
    {
        //
    }
    
    您传入的json:

    {
        "AdminName":"String content",
        "ClientIp":"String content",
        "ConfigResult":"String content",
        "UserConfigData":{
            "ContactInfo":"String content",
            "FirstName":"String content",
            "LastName":"String content",
            "UserName":"String content"
        }
    }
    
    更新: Fiddler请求屏幕截图:

    请求将到达服务器UpdateUserDetails()处理程序:

    我像上面的帖子一样更改了我的服务,直到我注意到提供的第一个屏幕截图,它才起作用。小提琴头上有一行

    内容类型:application/json


    这允许我向服务发送数据。将返回类型更改为string后,我能够返回原始数据。

    Hmm json数据和POST标题在我看来很好。如果可能的话,试着调试服务器代码以找出返回400的原因?请参阅上面的更新。当请求主体出现在Fiddler2中时,控件不会使用此方法。但是,如果没有请求主体,则控件会使用此方法。您给Fiddler的URL是什么?尝试将UserConfigData和ConfigResult聚合到父对象中,并让UpdateUserDetails()接受该对象?顺便说一句,如果你这么做了,你的json应该保持不变。我不确定这是否有效,但这似乎是一个对象格式匹配问题。我改变了方法如下,有一些改进。调用该方法,但userConfig为null。您知道相同的JSON是否也适用于此方法签名吗?public void UpdateUserDetails(UserConfigObject userConfig,string _clientIP,string AdminName)即使进行了这些更改,我仍然看到相同的问题。你能给我提供你在Fiddler2请求体中使用的JSON吗?我已经在上面的回答中粘贴了它们。我试过了,效果很好。让我发布一些屏幕截图