Получение HTTP ERROR 400 при публикации формы - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть страница с основной бритвой asp.net, где у меня есть простая форма, которая запрашивает адрес электронной почты пользователя и кнопку отправки. Когда я ввожу электронную почту и нажимаю кнопку отправки, я всегда получаю ошибку 400

ОШИБКА HTTP 400

Я не уверен, что я делаю здесь не так. Я пытался поставить точку останова прямо внутри метода OnPost, но я даже не дошел до этой точки.

Ниже мой код:

Homie.cshtml

@page
@model WebApplication1.Pages.HomieModel
@{
    ViewData["Title"] = "Homie";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h1>Homie</h1>

<form method="post">
    <input type="email" name="emailaddress">
    <input type="submit">
</form>

Homie.cshtml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace WebApplication1.Pages
{
    public class HomieModel : PageModel
    {
        public void OnGet(string n)
        {
        }

        public void OnPost()
        {
            var emailAddress = Request.Form["emailaddress"];
            // do something with emailAddress
        }

    }
}

Сообщение об ошибке (снимок экрана): enter image description here

Ответы [ 2 ]

0 голосов
/ 25 апреля 2019

Я выяснил, в чем проблема. Проблема заключалась в том, что в форме отсутствовал токен защиты от подделки.

Я просто добавил @Html.AntiForgeryToken(); внутри тега формы, и теперь все работает как положено.

Homie.cshtml

@page
@model WebApplication1.Pages.HomieModel
@{
    ViewData["Title"] = "Homie";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h1>Homie</h1>

<form method="post">
    <input type="email" name="emailaddress">
    <input type="submit">
    @Html.AntiForgeryToken();
</form>

Похоже, что когда у вас есть основное приложение mvc asp.net, и когда вы добавляете в него страницу бритвы и пытаетесь создать форму, она не по умолчанию Помощник тега формы для asp .net core.

Если вы добавите эту строку на страницу Homie.cshtml, @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers автоматически сделает ее помощником по тегу формы. Смотри здесь .

Поэтому я изменил свой код Homie.cshtml на:

Homie.cshtml

@page
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@model WebApplication1.Pages.HomieModel
@{
    ViewData["Title"] = "Homie";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h1>Homie</h1>

<form method="post">
    <input type="email" name="emailaddress">
    <input type="submit">
</form>
0 голосов
/ 25 апреля 2019

Напишите ваш метод OnGet() и OnPost следующим образом.Это покажет вам точную ошибку в представлении.

public IActionResult OnGet()
{
    return Page();
}

public IActionResult OnPost()
{
    if (!ModelState.IsValid)
    {
        return Page();
    }

    var emailAddress = Request.Form["emailaddress"];
    // do something with emailAddress
}
...