我有一个asp.net网站。它有一个订单表格,可在https://secure.example.com/order.aspx访问。网站上的链接不包含域名。例如,主页是'default.aspx'。
问题是,如果我从安全页面点击主页之类的链接,则网址将变为https://secure.example.com/default.aspx而不是http://www.example.com/default.aspx。
处理这个问题的好方法是什么?该方案应根据其启动位置自动使用任何域名。因此,如果网站是从“localhost”启动的,那么远离安全页面,网址应为http://localhost/ ...
导航链接位于母版页中。
答案 0 :(得分:2)
我认为最好的解决方案是http模块。
最简单的实现发布如下。 useUnsecureConnection
变量包含指示是否需要离开的值(应由您自己计算)。
public class SecurityModule : IHttpModule
{
#region IHttpModule Members
public void Dispose()
{
}
public void Init(HttpApplication application)
{
application.BeginRequest += new EventHandler(application_BeginRequest);
}
#endregion
#region Events Handling
protected void application_BeginRequest(object sender, EventArgs e)
{
HttpApplication application = ((HttpApplication)(sender));
HttpRequest request = application.Request;
HttpResponse response = application.Response;
// here should be you condition to determine
// whether to move away from secure page or not
bool useUnsecureConnection = true;
if (useUnsecureConnection && request.IsSecureConnection)
{
string absoluteUri = request.Url.AbsoluteUri;
response.Redirect(absoluteUri.Replace("https://", "http://"), true);
}
}
#endregion
}
当然,不要忘记在web.config中注册模块:
<httpModules>
<!--Used to redirect secure connections to the unsecure ones
if necessary-->
<add name="Security"
type="{YourNamespace}.Handlers.SecurityModule,
{YourAssembly}" />
...
</httpModules>
</system.web>
BTW,对于localhost
,条件可能如下:
useUnsecureConnection = request.IsLocal;
如果请求发起方的IP地址为true
,或者请求的IP地址与服务器的IP地址相同,则为127.0.0.1
。