ASP.NET HTTP POST和重定向

时间:2015-10-20 15:07:49

标签: http-post http-get http-redirect

我的用户将从外部网站定向到我的应用程序,在此重定向过程中,用户的电子邮件地址将通过HTTP POST发送给我。

我想要完成的是接收用户的电子邮件地址,并将用户发送到索引视图。

我有以下方法:

[HttpGet]
public ActionResult Index()
    {
        string email = "";

        string[] keys = Request.Form.AllKeys;
        for (int i = 0; i < keys.Length; i++)
        {
            Response.Write(keys[i] + ": " + Request.Form[keys[i]] + "<br>");
            System.Diagnostics.Debug.WriteLine(keys[i] + ": " + Request.Form[keys[i]]);

            email = Request.Form[keys[i]].ToString();
        }

        return Index(email);
    }

 [HttpPost]
    public ActionResult Index(string email)
    {
        return View();
    }

这是我必须模仿外部网站工作的方法,该工作是使用用户的电子邮件地址将用户重定向到我的视图。

 public ActionResult Httppost()
    {
        using (var wb = new WebClient())
        {
            var data = new NameValueCollection();
            data["email"] = "test@email.com";

            var response = wb.UploadValues("http://localhost:57695/Home/Index", "POST", data);
        }

        return RedirectToAction("Index");
    }

问题是,Index从未从我的Httppost()方法接收电子邮件地址,并且电子邮件始终以“”形式接收。如何从Httppost()收到电子邮件到Index()?

1 个答案:

答案 0 :(得分:0)

为什么要在单独请求中发送电子邮件地址?这两个请求彼此无关。一个接收到的数据不可用于另一个,并且不保证它们以相同的顺序发生。

而不是:

var response = wb.UploadValues("http://localhost:57695/Home/Index", "POST", data);
return RedirectToAction("Index");

只需在一个请求中发送该值,即可在该请求中使用该值:

return RedirectToAction("Index", new { email = "test@email.com" });

然后你只需要一个动作:

[HttpGet]
public ActionResult Index(string email)
{
    // use the email parameter
}

旁注:我认为这不会达到预期效果:

return Index(email);

这将寻找以email变量的值命名的视图。由于方法重载的工作原理,您无法真正使用string作为模型。您可能希望将其设置在实际模型上,或者将其放在ViewBag之类的内容中。