web api站点上的POST方法接收空json

2024-06-16 11:20:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python客户机,它假设通过post-webapi调用从DB获取用户详细信息,但是当我调试webapi时,传递给post方法的参数为null。从python站点,我将字典序列化为json并网站.api应该将其作为名为Credentials的自定义对象接收,并使用它从DB获取数据并将其发回。你知道吗

我用的是C#client,所有的东西都很好用,json看起来完全一样。 我还尝试了restle客户机,当我从python复制粘贴体值时,效果很好。你知道吗

Python:

def CredentialsCheck(self,credentials):
    credentialsDictionary = { "Email": credentials.email, "Password": 
    credentials.password}
    data = json.dumps(credentialsDictionary)
    headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}

    request = requests.post(self.url,json = data,headers = headers)
    response = request.json()
    print(response)

creds = UserCredentials("n","s")

api = WebApiDataHandler()
api.CredentialsCheck(creds)

显然还有init(self):我在这里设置url

C#UI:-这个很好用。你知道吗

    public CalendarUser CredentialsCheck(CalendarUserCredentials credentials)
        {
            wc.Headers.Add("Content-Type", "application/json");
            wc.Headers.Add("Data-Type", "application/json");
            string userJson = serializer.Serialize(credentials);
            string test = wc.BaseAddress + "GetUser" + userJson;
            CalendarUser loggedInUser = serializer.Deserialize<CalendarUser> 
    (wc.UploadString(wc.BaseAddress + "GetUser", "Post", userJson));
            if (loggedInUser.Name != "" && loggedInUser.Surname != "" && 
    loggedInUser.Name != null && loggedInUser.Surname != null)
                return loggedInUser;
            else
                throw new ArgumentException("Incorrect log in details.");
        }

C#web api控制器:

[HttpPost]
public CalendarUser GetUser([FromBody]CalendarUserCredentials credentials) //when i put breakpoint here it fires but value of CalendarUserCredentials is null
{
     CalendarUser user = new CalendarUser();
     dataHandler.CredentialsCheck(credentials, out user);
     return user;
}

我希望webapi GetUser方法接收CalendarUserCredentials,电子邮件的值为“n”,密码的值为“s”


Tags: selfapijsonapplicationpostnullwebapiheaders
1条回答
网友
1楼 · 发布于 2024-06-16 11:20:30

我通过将CalendarUserCredentials更改为字符串,然后反序列化此字符串来解决此问题,不过如果有更好的解决方案,请与我共享:)

JavaScriptSerializer serializer = new JavaScriptSerializer();

[HttpPost]
        public CalendarUser GetUser([FromBody]string json)
        {
            CalendarUserCredentials credentials = serializer.Deserialize<CalendarUserCredentials>(json);
            CalendarUser user = new CalendarUser();
            dataHandler.CredentialsCheck(credentials, out user);
            return user;
        }

我想理解为什么它从C#接受json并将其正确转换为CalendarUserCredentials,但如果我从Python发送相同的json,它只会看到空的O.O

相关问题 更多 >