Строка запроса, присутствующая в POST после запроса GET

#c# #asp.net-core #razor-pages #.net-5

#c# #asp.net-ядро #razor-страницы #.net-5

Вопрос:

Я довольно новичок в веб-разработке, так что потерпите, если этот вопрос покажется вам очень простым.

У меня есть эти коды на моей странице Razor

 <form method="get">
    <input type="number" name="Id" />
    <input type="date" name="AddDate" />
    <input type="text" name="Title" />
    <input type="checkbox" name="IsDone" value="true" />

    <input type="submit" value="GET" />
</form>

<form method="post">
    <input type="number" name="Id" />
    <input type="date" name="AddDate" />
    <input type="text" name="Title" />
    <input type="checkbox" name="IsDone" value="true" />

    <input type="submit" value="POST" />
</form>
 

И моя модель страницы

 public void OnGet(int id, DateTime addDate, string title, bool isDone)
{
}
public void OnPost(int id, DateTime addDate, string title, bool isDone)
{
    // Not empty when POSTed after GET. I suppose the POST will not use query string?
    var q = Request.QueryString;
}
 

Когда я ОТПРАВЛЯЮ форму после GET, строка запроса не является пустой (из последнего GET). Значения формы публикуются нормально, но наличие строки запроса в запросе POST меня смущает.

Я пропустил какую-то фундаментальную концепцию HTML?

Комментарии:

1. Для тех, кто проголосовал за закрытие этого вопроса, не могли бы вы поделиться причиной?

Ответ №1:

Когда я ОТПРАВЛЯЮ форму после GET, строка запроса не является пустой (из последнего GET).

По умолчанию значения формы добавляются к URL-адресу принимающей страницы в качестве значений строки запроса, если используется глагол GET.

В Razor pages, если имя страницы или атрибут обработчика страницы опущены, форма будет отправлена по текущему URL-адресу.

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

Если вы не хотите, чтобы эти значения строки запроса для предыдущего запроса GET присутствовали в вашем обработчике POST, вы можете попробовать явно задать asp-page атрибут с именем текущей модели страницы, как показано ниже.

 <form method="post" asp-page="/Test">
    <input type="number" name="Id" />
    <input type="date" name="AddDate" />
    <input type="text" name="Title" />
    <input type="checkbox" name="IsDone" value="true" />

    <input type="submit" value="POST" />
</form>
 

Ответ №2:

Браузеры обрабатывают форму без action (которая действительно должна быть предоставлена) так же, как action="" что означает: используйте текущее местоположение страницы. Это означает, что она включает текущую строку запроса.

Поскольку вы этого не хотите: укажите явное action