我的用户将从外部网站定向到我的应用程序,在此重定向过程中,用户的电子邮件地址将通过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()?
答案 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
之类的内容中。