在ASP.NET MVC中重定向到外部页面的返回类型是什么?

时间:2016-08-11 16:50:36

标签: c# asp.net .net asp.net-mvc

这主要与我之前的问题有关,但与此不同。 我正在我的代码中集成支付网关,我有一个帖子URL发布到。 所以点击一个按钮,控件从我的视图进入控制器,我在那里调用一个方法来做帖子。

所以我担心的是我目前正在使用以下代码发布到URL但是提供程序还没有准备好所以我无法测试但是我想知道我是否在这里使用了正确的返回类型。

这会将我从控制器重定向到提供商网站/页面吗?

这样做的正确方法是什么?我准备的一些地方我只能通过Javascript而不是来自控制器。

请问主体可否澄清过去几天我一直在努力解决这个问题?

public HttpWebResponse SendPostRequest(string data, string url)
{
    var datetime = DateTime.UtcNow;
    data = string.Format("ID*1100|Field01*19101|FirstName*james|LastName*MEZE|AmountDue*20000|CurrentTime*7/5/2016 4:25 PM);
    var requestPayload = Encrypt(data);
    url = "https://www.example.com/Account/SSO/Home";

    HttpWebRequest httpRequest = (HttpWebRequest) HttpWebRequest.Create(url);
    httpRequest.Method = "POST";
    httpRequest.ContentType = "text/plain";// "application/x-www-form-urlencoded";
    httpRequest.ContentLength = encryptedRequestPayload.Length;

    var streamWriter = new StreamWriter(httpRequest.GetRequestStream());
    streamWriter.Write(encryptedRequestPayload);
    streamWriter.Close();

    /*var response = (HttpWebResponse)httpRequest.GetResponse(); 
    var statusCode = response.StatusCode; 
    var description = response.StatusDescription;

    var sr = new StreamReader(response.GetResponseStream());
    var text = sr.ReadToEnd();*/

    return (HttpWebResponse) httpRequest.GetResponse();
}

返回HttpWebResponse只显示一个包含System.Net.HttpWebResponse行的空白页面。 但在响应中,我看到XML消息的响应说该服务已关闭,请联系管理员。 为什么我无法在网页中看到该消息?请帮忙。

2 个答案:

答案 0 :(得分:1)

要重定向到外部网页,您可以使用Redirect方法并传递网址。

public ActionResult SendPostRequest(string data, string url)
{
    //do youre stuff

    return Redirect("https://www.example.com/Account/SSO/Home");
}

这只适用于HTTP GET调用,因为浏览器在成为重定向结果时会执行新的GET。

如果您想要发布到另一个页面并向访问者显示结果页面,我认为实现此目的的唯一可行方法是使用JavaScript。为此,您可以返回一些带有<script>标记的简单html,该标记使用HTTP POST发送<form>

//$ is the C#6 syntax of string.Format
return Content($@"
    <form action='https://www.example.com/Account/SSO/Home' id='myForm' method='post'>
      <input type='hidden' name='value1' value='{value1}' />
      <input type='hidden' name='value2' value='{value2}' />
    </form>
    <script>
      document.getElementById('myForm').submit(); //submit the form
    </script>");

我从this answer

获得了一个表单

答案 1 :(得分:0)

您似乎有两个问题:

1)服务器没有以您想要的方式响应。您可能需要联系管理员,如消息所示。 2)您没有返回ASP.NET MVC期望的内容,因此框架调用的ToString()方法只会显示System.Net.HttpWebResponse

你很接近它。难道你不能返回从响应流中获得的文本吗?

您可以写下:

return Content(text); // after uncommenting your code.

此答案将向您展示posting data to a server and passing the response to the client的成功尝试。