我在IIS7上运行了许多现有的ASMX Web服务,并希望对其进行更改,以便所有请求和响应都必须通过HTTPS进行。
该网站还运行其他网页,如PHP和Classic ASP,因此我无法更改网站根目录以提供HTTPS网页。
如何根据ASMX服务(应用程序)设置此项,以便在有人访问http://www.mydomain.com/MyService/ServiceName.asmx时将其重定向到https://www.mydomain.com/MyService/ServiceName.asmx或返回404错误?
思考和最好的方法?
答案 0 :(得分:3)
您是否尝试过重写网址?
<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>
答案 1 :(得分:1)
一个更简单的解决方案就是在每个服务的构造函数中包含以下代码 - 允许您单独为每个服务决定它。
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);
}
答案 2 :(得分:0)
@oexenhave使用的重定向对我不起作用。取而代之的是,我使用了以下内容(@oexenhave戴了帽子,以完成大部分的出色工作)
#include <iostream>
using namespace std;
int main(int argc, char** argv)
{
cout << "You have entered " << argc
<< " arguments:" << "\n";
for (int i = 0; i < argc; ++i)
cout << argv[i] << "\n";
return 0;
}
将其添加到asmx构造函数中。
答案 3 :(得分:-1)
我建议您使用WCF而不是ASMX http://msdn.microsoft.com/en-us/library/aa480190.aspx。
对于您的上述问题,这是否可以解决您的问题?
http://msdn.microsoft.com/en-us/library/aa302409.aspx
...谢谢