为什么刷新浏览器触发发布请求而不是获取请求

时间:2019-07-31 02:44:16

标签: asp.net-mvc http httprequest

下面是控制器:

public class HomeController : Controller
{
   public ViewResult Index() => View("SimpleForm");
   public ViewResult ReceiveForm(string name, string city) => View("Result", $"{name} lives in {city}");
}

和SimpleForm.cshtml是:

 <form method="post" asp-action="ReceiveForm">
        <div class="form-group">
            <label for="name">Name:</label>
            <input class="form-control" name="name" />
        </div>
        <div class="form-group">
            <label for="name">City:</label>
            <input class="form-control" name="city" />
        </div>
        <button class="btn btn-primary center-block" type="submit">Submit</button>
 </form>

因此,当我运行该应用程序时,将使用默认的Index操作,因此,我填写了表单并单击Submit按钮以触发发布请求并直接转到ReceiveForm操作,该操作将结果显示在视图中。所以现在我的浏览器上的URL是/ Home / ReceiveForm,我重新加载了一个浏览器,并意识到触发了一个新的发布请求,但是为什么它是发布请求,应该是一个获取请求吗?重启浏览器不是和将/Home/ReceiveForm复制到浏览器的地址栏中并按Enter一样,总是触发获取请求吗?


1 个答案:

答案 0 :(得分:0)

您将发布到ReceiveForm操作,然后该操作返回视图。而是执行以下操作:

  • 创建httpGet的{​​{1}}版本
  • 创建ReceiveForm的{​​{1}}版本
  • 通过httpPost版本操作加载用户界面
  • 发布到ReceiveForm版本操作
  • 发布后进行处理并重定向到httpGet版本以再次加载UI。要将重定向期间的数据(例如结果)从httpPost发送到HttpGet操作,可以使用Post对象。