如何在MVC 4中将POST更改为SSL URL

时间:2012-03-17 16:38:04

标签: asp.net-mvc-4

我想知道是否有一种简单的方法可以让用户的POST操作重定向到网站的HTTPS版本。例如,用户转到http://www.omegusprime.com/Request/ABC并填写表单。如何将SUBMIT按钮发布到https://www.omegusprime.com/Request/ABC

我知道RequireHttpsAttribute,但这并不影响Html.BeginForm()的行为方式。

3 个答案:

答案 0 :(得分:1)

为什么要将表单帖子直接重定向到HTTPS?

在任何情况下,您都不必在MVC中使用HTMLHelper,您可以使用普通的HTML来编写表单。所以,不要使用Html.BeginForm(...),而是使用它:

<form action="https://www.omegusprime.com/Request/ABC" method="POST">

...

your form fields

...

</form>

答案 1 :(得分:1)

我同意保罗的回答。编写普通的HTML标签似乎是唯一的方法。

但我建议混合使用HTML和MVC的URL Helper。它确保,URL是正确的,它使用正确的域名。当您拥有本地开发版本(即https://localhost/Request/ABC)和生产版本(https://www.omegusprime.com/Request/ABC)时,这是一个优势。

VB示例:

<form action="@Url.Action("ABC", "Request", Nothing, "https")" method="post">
...
</form>

在C#中看起来应该是这样的:

<form action="@Url.Action("ABC", "Request", null, "https")" method="post">

答案 2 :(得分:0)

一种方法是at the routing level。但就像史蒂夫说的那样,这很糟糕。

从技术上讲,您无法重定向帖子。您可以将其从一个操作转发到另一个操作,但不能发出重定向。重定向是GET而不是POST。

实际上,最好的方法是确保在HTTPS GET请求中呈现表单。如果页面为https://whatever.com,则Html.BeginForm将呈现相对于该页面的URL。因此,从HTTPS页面发布到相对URL将意味着表单通过HTTPS进行POST。

我是Paul的第二个问题:为什么要通过HTTP呈现表单,而是通过HTTPS发布?