【问题标题】:What is the return type to redirect to an external page in ASP.NET MVC?在 ASP.NET MVC 中重定向到外部页面的返回类型是什么?
【发布时间】:2016-08-11 16:50:36
【问题描述】:

这主要与我之前的问题有关,但与此不同。 我在我的代码中集成了一个支付网关,并且我有一个发布 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 消息,响应中说服务已关闭,请联系管理员。 为什么我无法在网页中看到该消息?请帮忙。

【问题讨论】:

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


    【解决方案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的表格得到了这个想法

    【讨论】:

    • 但在这篇文章中我看到它说不使用重定向。 stackoverflow.com/questions/27577011/… 。我拥有的网址是发布网址。您建议的上述方法可以使用吗?
    • 另外,如果我使用重定向,如何发布参数。看起来它没有重载
    • @Naadia POST 重定向无法使用 HTTP,它们将始终 GET。通过使用 ?key1=value1&amp;key=value2 语法将 GET 参数附加到 url 可以轻松传递 GET 参数。为了发送 POST,我在答案中附加了一个想法。
    • 感谢您的帖子。它确实帮助我查看了页面上的内容。下面的响应也是如此,它的变化也非常小。对接受哪个作为答案感到困惑。我希望我能做两个:)
    【解决方案2】:

    你似乎有两个问题:

    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 的成功尝试。

    【讨论】:

    • 这确实帮助了我。谢谢。
    猜你喜欢
    • 2013-03-11
    • 2011-09-15
    • 2016-09-11
    • 2011-02-10
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    相关资源
    最近更新 更多