Метод POST на веб-сайте API получает нулевой JSON - PullRequest
0 голосов
/ 02 февраля 2019

У меня есть клиент Python, который предполагает получать информацию о пользователе из БД через вызов post web api, однако, когда я отлаживаю свой web api, параметр, который я передаю методу post, имеет значение null.С сайта python я передаю словарь, сериализованный в json, и web.api должен получить его как пользовательский объект с именем Credentials и использовать его для получения данных из БД и отправки обратно.

Я использовал клиент C #, и все сработалохорошо, JSON выглядит точно так же.Я также пытался перезапустить клиент, и когда я копирую значение вставки тела из 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 # контроллер веб-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;
}

Я ожидаю, что метод веб-API GetUserполучить CalendarUserCredentials со значениями «n» для электронной почты и «s» для пароля

1 Ответ

0 голосов
/ 02 февраля 2019

Ну, я решил проблему, изменив 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;
        }

Я хотел бы понять, почему он принимает json отC # и преобразует его правильно в CalendarUserCredentials, но если я посылаю тот же JSON из Python, он видит только ноль Oo

...