【问题标题】:Query string present in POST after a GET requestGET 请求后 POST 中存在的查询字符串
【发布时间】:2021-03-22 13:31:05
【问题描述】:

我是 Web 开发的新手,如果这个问题看起来是一个非常基本的问题,请耐心等待。

我的 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 正常,但是 POST 请求中存在查询字符串让我感到困惑。

我是否遗漏了一些基本的 HTML 概念?

【问题讨论】:

  • 对于那些投票结束这个问题的人,介意分享原因吗?

标签: c# asp.net-core razor-pages .net-5


【解决方案1】:

当我在 GET 之后 POST 表单时,查询字符串不为空(从最后一个 GET 开始)。

默认情况下,如果使用 GET 动词,表单值将作为查询字符串值附加到接收页面的 URL。

在 Razor 页面中,如果省略页面名称或页面处理程序属性,则表单将提交到当前 URL。

表单值 POST 正常,但 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

    【讨论】:

      猜你喜欢
      • 2020-06-30
      • 2012-04-12
      • 2020-12-02
      • 2014-07-19
      • 2019-05-29
      • 1970-01-01
      • 2020-07-22
      • 2016-05-04
      相关资源
      最近更新 更多