Посмотрите в источнике для File::Spec
, чтобы видеть, как он загружает правильного делегата на основе операционной системы.:)
File::Spec
имеет отдельный файл модуля Perl для каждой ОС. File::Spec::Win32
, File::Spec::OS2
, и т.д.
Это проверяет операционную систему и загрузит соответствующее .pm
файл во времени выполнения на основе ОС.
# From the source code of File::Spec
my %module = (
MSWin32 => 'Win32',
os2 => 'OS2',
VMS => 'VMS',
NetWare => 'Win32', # Yes, File::Spec::Win32 works on NetWare.
symbian => 'Win32', # Yes, File::Spec::Win32 works on symbian.
dos => 'OS2', # Yes, File::Spec::OS2 works on DJGPP.
cygwin => 'Cygwin',
amigaos => 'AmigaOS');
my $module = $module{$^O} || 'Unix';
require "File/Spec/$module.pm";
our @ISA = ("File::Spec::$module");
Вы можете переопределить атрибут действия формы, созданной с помощью Html.BeginForm.
<%
var actionURL = (Model.UseSSL ? "https://" : "http://")
+ Request.Url.Host + Request.Url.PathAndQuery;
using (
Html.BeginForm(
"Action",
"Controller",
FormMethod.Post,
new { @action = actionURL }
)
)
%>
Обратите внимание на использование флага Model.UseSSL, который должен быть передан этому представлению его контроллером.
я знаю, что это старый вопрос, просто предлагаю более чистое решение:
<form id="someLie" method="post" action="<%=Url.Action("action", "controller",new {}, YourConfigOrModel.UseSSL ? Uri.UriSchemeHttps : Uri.UriSchemeHttp) %>">
.. form elements..
</form>
это будет отображать абсолютный путь, содержащий https://... или обычный относительный для http