HttpResponseMessage пост API-формат JSON с C # - PullRequest
0 голосов
/ 04 июня 2019

Я использовал метод HttpResponseMessage Post, чтобы позволить мобильному терминалу проверить пароль учетной записи. Я использовал следующий код для успешной работы, но формат POST должен быть запущен следующим образом.

'{"ID":"xxx","Password":"xxx"}'

Нужно два "может бежать, я не знаю почему. Я не могу запросить услугу, используя обычный формат POST на iOS или Android. Формат, который я хочу, это {"ID":"xxx","Password":"xxx"}, без '

  [HttpPost]

        public HttpResponseMessage Post([FromBody] string DATA)
        {
            using (appapidataEntities entities = new appapidataEntities())
            {
                //string controllerName = ControllerContext.RouteData.Values["controller"].ToString();
                JObject jo = JObject.Parse(DATA);
                string id = jo["ID"].ToString();
                string password = jo["Password"].ToString();
                var user = entities.USERs.Where(x => x.ID == id && x.Password == password).FirstOrDefault();
                var result = new
                {
                    message = "failure"
                };
                var result2 = new
                {
                    message = "success"
                };

                if (user == null)
                {
                    return Request.CreateResponse(HttpStatusCode.OK, result);
                }
                else
                {
                    return Request.CreateResponse(HttpStatusCode.OK, result2);
                }
            }
        }
public partial class USER
   {
       public string ID { get; set; }
       public string Password { get; set; }
   }
}

Пожалуйста, кто-нибудь с опытом, чтобы помочь мне, большое спасибо.

1 Ответ

0 голосов
/ 04 июня 2019

Как сказал @Nkosi, правильный способ получения сложного объекта - использование класса / объекта (также называемого «связыванием модели»)

В ваших моделях добавьте этот класс.Этот класс будет «контрактом» между службой с любым внешним приложением, которое вызывает службу.Обычно любой клиент (служба, приложение или интерфейс) также имеет класс с этим контрактом для вызова службы.

public class LoginViewModel {
   public string ID  { get; set; }
   public string Password  { get; set; }
}

Теперь измените контроллер следующим образом:

[HttpPost]
public HttpResponseMessage Post([FromBody] LoginViewModel DATA) {
   using (appapidataEntities entities = new appapidataEntities())           
        string id = DATA.ID;
        string password = DATA.Password;

       // rest of the code
   }
}

Убедитесь, чтоустройство отправляет данные, которые ожидает служба (возможно, добавляя точку останова, если вы выполняете отладку в Android Studio перед выполнением запроса), и добавьте точку останова в свой контроллер, чтобы убедиться, что переменная DATA имеет правильные значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...