我想知道是否有一种简单的方法可以让用户的POST操作重定向到网站的HTTPS版本。例如,用户转到http://www.omegusprime.com/Request/ABC并填写表单。如何将SUBMIT按钮发布到https://www.omegusprime.com/Request/ABC?
我知道RequireHttpsAttribute,但这并不影响Html.BeginForm()的行为方式。
答案 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发布?