4

我有许多在 IIS7 上运行的现有 ASMX Web 服务,并且想要更改它们,以便所有请求和响应都必须通过 HTTPS 进行。

该站点还运行其他页面,例如 PHP 和 Classic ASP,因此我不能只更改站点根目录以提供 HTTPS 页面。

我如何设置每个 ASMX 服务(应用程序),以便如果有人访问http://www.mydomain.com/MyService/ServiceName.asmx它要么将他们重定向到https://www.mydomain.com/MyService/ServiceName .asmx还是返回 404 错误?

想法和最佳方法?

4

4 回答 4

4

您是否尝试过 URL 重写?

<rewrite>
    <rules>
        <rule name="Force HTTPS" stopProcessing="true">
            <match url="(.*)/ServiceName.asmx" />
            <conditions>
                <add input="{HTTPS}" pattern="^OFF$" />
            </conditions>
            <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
        </rule>
    </rules>
</rewrite>
于 2013-10-12T08:45:54.327 回答
2

一个更简单的解决方案是在每个服务的构造函数中包含以下代码 - 允许您单独决定每个服务。

if (!HttpContext.Current.Request.IsSecureConnection)
{
    var sslUrl = HttpContext.Current.Request.RawUrl.Replace("http://", "https://");

    Response.Clear();
    Response.Write(string.Format("This service requires a SSL connection please go to {0}", sslUrl));
    Response.End();

    // Or simply redirect
    // Response.Redirect(sslUrl);
}
于 2013-10-17T05:21:07.487 回答
0

@oexenhave 使用的重定向对我不起作用。相反,我使用了以下内容(向@oexenhave 致敬以完成大部分出色的工作)

if (!HttpContext.Current.Request.IsSecureConnection)
{
  var sslUrl = HttpContext.Current.Request.RawUrl.Replace("http://", "https://");
  Context.RewritePath(sslUrl);
}

将此添加到 asmx 构造函数中。

于 2020-12-01T14:54:01.453 回答
-3

我会鼓励你使用 WCF 而不是 ASMX http://msdn.microsoft.com/en-us/library/aa480190.aspx

对于您的上述问题,这是否解决了您的问题?

http://msdn.microsoft.com/en-us/library/aa302409.aspx

谢谢...

于 2013-10-17T09:32:27.323 回答