Я создаю форму входа в систему с использованием модели MVC. На самом деле, мое приложение может правильно установить GET, DELETE и даже POST (Create). Когда я пытался использовать метод POST для отправки объекта JSON в мой метод входа, генерируется исключение «Bad Request».Неверный запрос Исключение вызывается при загрузке объекта JSON с использованием метода POST
Вот код, чтобы прояснить мой вопрос: В классе LoginController, я реализовал метод входа в систему следующим образом:
[HttpPost]
public ActionResult Login(LoginViewModel lvm)
{
LoginServiceClient lsc = new LoginServiceClient();
bool userFound_flag = lsc.Login(lvm.User);
if (userFound_flag)
return RedirectToAction("Index_User", lvm.User);
else
return RedirectToAction("Create");
}
}
В папке Model, этот класс LoginServiceClient где я реализовать метод Логин, который будет загружать объект JSON следующим образом:
public bool Login(User user)
{
try
{
var webClient = new WebClient();
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(User));
MemoryStream mem = new MemoryStream();
ser.WriteObject(mem, user);
string data = Encoding.UTF8.GetString(mem.ToArray(), 0, (int)mem.Length);
webClient.Headers["Content-type"] = "application/json";
webClient.Encoding = Encoding.UTF8;
String str = webClient.UploadString(BASE_URL + "login", "POST", data);
return true;
}
catch (WebException webEx)
{
return false;
}
}
Как вы можете видеть, линия String str = webClient.UploadString(BASE_URL + "login", "POST", data);
- это исключение. Эта функция аналогична функции Create, которую я использую для создания нового объекта в моей базе данных. Строковые данные представляют собой, например, "\"City\":null,\"Country\":null,\"Email\":null,\"FirstName\":null,\"Gender\":null,\"Id\":0,\"LastName\":null,\"Password\":\"EEPass\",\"Telephone\":0,\"UserName\":\"EE\"}"
На моей стороне сервера здесь приведен метод входа. Следующий метод в IloginService.cs класс:
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "login", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
User Login(User _user);
И в LoginSerive.svs.cs класса, где я подключиться к БД:
public User Login(User _user)
{
using (OnlineStoreDBEntities ose = new OnlineStoreDBEntities())
{
return ose.UserEntities.Where(pe => pe.Username == _user.UserName && pe.Password == _user.Password).Select(pe => new User
{
Id = pe.Id,
Email = pe.Email,
FirstName = pe.FirstName,
LastName = pe.LastName,
//Telephone = Convert.ToInt32(pe.Telephone),
Country = pe.Country,
City = pe.City,
//Gender = Convert.ToInt32(pe.Gender)
}).First();
};
}
Наконец, чтобы сделать я уверен, что и функции Create, и Login имеют одно и то же тело в классе модели. Я также использую метод POST, потому что некоторые данные должны быть скрыты, например, пароль. Но строка загрузки не может загрузить данные (строка JSON). Когда я показываю строку данных, она содержит нужные мне данные, поэтому она не пустая.