Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Умоляю, момогите ASP.NET.CORE HTTP error! Status code: 400

ы ы Знаток (403), закрыт 1 день назад
public class RegistrationModel : PageModel
{
private static readonly List<User> usersList = new List<User>();

public void OnGet()
{

}

[BindProperty]
public User User { get; set; }

public IActionResult OnPost([FromBody] User user)
{
try
{
if (user == null ||
string.IsNullOrEmpty( user.Name ) ||
string.IsNullOrEmpty(user.Password))
{
return BadRequest(new { success = false, message = "Invalid data." });
}

usersList.Add(user);
Console.WriteLine($"User added: { user.Name }");

return new JsonResult(new { success = true });
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
return StatusCode(500, new { success = false, message = ex.Message });
}
}
}<script>
function validateForm(event) {
event.preventDefault();

const password = document.getElementById("password").value;
const password1 = document.getElementById("password1").value;

if (password !== password1) {
alert("Пароли не совпадают!");
return;
}

const user = {
name: document.getElementById("login").value,
password: password
};

console.log(user);
fetch('/Registration', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(user)
})
.then(response => {
if (!response.ok) {

throw new Error(`HTTP error! Status code: ${response.status}`);
}
return response.json();
})
.then(data => {
console.log(data);
window.location.href = '/Success';
})
.catch(error => {
console.error('Error:', error);
alert(error.message);
});
}
</script> public class User
{
[Required]
[JsonPropertyName("name")]
public string Name { get; set; }

[Required]
[JsonPropertyName("password")]
public string Password { get; set; }
}
Лучший ответ
Behemoth Behemothov Ученик (236) 1 день назад
password и name измени на заглавные.
ы ыЗнаток (403) 1 день назад
спасибо добрый человек
ы ыЗнаток (403) 1 день назад
public IActionResult OnPost([FromBody] User user) не срабатывает вообще
Behemoth Behemothov Ученик (236) ы ы, сможете ли вы скинуть мне скрипт в зип архиве а то очень не удобно читать все тут..
Остальные ответы
Tails Просветленный (45909) 1 день назад
Не удалось найти информацию о том, как решить проблему с ошибкой 400 в приведённом коде. Однако есть общие рекомендации, которые могут помочь исправить ошибку 400 Bad Request:
  • Проверить URL-адрес. Внимательно прочтите адресную строку: туда могла закрасться опечатка. Также попробуйте найти страницу в одном или нескольких поисковиках: обычно в них указаны правильные ссылки. 12
  • Очистить кэш и cookies браузера. Они могут устареть или вступить друг с другом в конфликт. Для этого нужно зайти в настройки браузера или воспользоваться программой для очистки компьютера (например, CCleaner). 12
  • Сжать файл и повторить загрузку. Почти у каждого сайта установлен предельный размер файла, который можно на него загрузить. Если размер превышает допустимый предел, это может вызвать ошибку 400. 1
  • Очистить DNS-кэш. Если сайт сменил IP-адрес, а в кэше остались устаревшие данные, это может вызвать ошибку 400. Способ очистки зависит от операционной системы. 1
Если ничего из вышеперечисленного не помогло, рекомен
ы ыЗнаток (403) 1 день назад
там надо кошерно User из js принять
Tails Просветленный (45909) ы ы, Не удалось найти информацию о том, как кошерно принять User из JavaScript. Однако есть общие рекомендации, которые могут помочь исправить ошибку 400 Bad Request:
  • Проверить URL-адрес. Внимательно прочтите адресную строку: туда могла закрасться опечатка. Также попробуйте найти страницу в одном или нескольких поисковиках: обычно в них указаны правильные ссылки. 1
  • Очистить кэш и cookies браузера. Они могут устареть или вступить друг с другом в конфликт. Для этого нужно зайти в настройки браузера или воспользоваться программой для очистки компьютера (например, CCleaner). 1
  • Сжать файл и повторить загрузку. Почти у каждого сайта установлен предельный размер файла, который можно на него загрузить. Если размер превышает допустимый предел, это может вызвать ошибку 400. 
chel 1C 1C Знаток (463) 1 день назад
  1. Читайте спецификацию в RFC HTTP 1.1. Начните с нотации Бахуса-Наура, потом 3 глава, потом 11, потом дополнение (14 глава) с заголовками.
  2. Проверьте конфигурацию сервера.
chel 1C 1CЗнаток (463) 1 день назад
Вроде, нарушены принципы асинхронного программирования.
chel 1C 1CЗнаток (463) 1 день назад
В клиентской части, разумеется.
odpumt Знаток (485) 1 день назад
Ваш код выглядит в целом правильно, но есть несколько моментов, которые могут вызывать проблему с ошибкой 400 (Bad Request). Разберем возможные причины и как их исправить.

Проблемы с именами свойств: В вашем JavaScript коде вы используете name и password, но в классе User они объявлены как Name и Password (с заглавной буквы). Core использует регистронезависимое сопоставление, но в данном случае, возможно, лучше использовать атрибут JsonPropertyName для явного указания, как ваши свойства должны называться при сериализации и десериализации JSON. Вы уже сделали это, но имейте в виду, что в JavaScript вы должны использовать правильные имена.

Измените часть вашего JavaScript кода:


const user = {
name: document.getElementById("login").value,
password: password
};

на


const user = {
Name: document.getElementById("login").value,
Password: password
};

Атрибуты в модели: Убедитесь, что у вас есть соответствующие пространства имен для атрибутов, таких как [Required] и [JsonPropertyName]. Вам нужно импортировать соответствующие пространства имен:


using System.ComponentModel.DataAnnotations;
using System.Text.Json.Serialization;

Метод OnPost: Ваша модель пользователя User уже привязана к BindProperty. Это означает, что вы не должны использовать [FromBody] в параметрах метода OnPost. Измените сигнатуру метода:


public IActionResult OnPost()
{
try
{
if (User == null ||
string.IsNullOrEmpty( User.Name ) ||
string.IsNullOrEmpty(User.Password))
{
return BadRequest(new { success = false, message = "Invalid data." });
}

usersList.Add(User);
Console.WriteLine($"User added: { User.Name }");

return new JsonResult(new { success = true });
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
return StatusCode(500, new { success = false, message = ex.Message });
}
}

Проверка на клиенте: Убедитесь, что на клиенте вы отправляете корректный JSON. Если вы все же хотите использовать name и password, тогда соответствующим образом измените атрибуты в классе User.

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

Применив эти изменения, вы должны решить проблему с ошибкой 400. Если ошибка все еще возникает, включите логирование и проверьте сообщения об ошибках в консоли браузера и в серверных журналах.
ы ыЗнаток (403) 1 день назад
Клиент отправляет JSON, но метод OnPost() даже не срабатывает
Похожие вопросы