C# 基于配置值防止网站中的Http请求

C# 基于配置值防止网站中的Http请求,c#,asp.net,c#-4.0,C#,Asp.net,C# 4.0,我已经实现了在IIS中部署的ASP.Net应用程序,并启用了http和https端口。现在我需要根据Web.Config值拒绝HTTP请求。如果此值设置为True,则它不应接受HTTP随附的请求,就像它应抛出错误无效操作一样。。尝试使用安全连接进行请求。我做的第一件事是在Global.asax文件中检查此项,如下所示: if (Utilities.Utility.HttpsCheck) { if (!Request.IsSecureConnection)

我已经实现了在IIS中部署的ASP.Net应用程序,并启用了http和https端口。现在我需要根据Web.Config值拒绝HTTP请求。如果此值设置为True,则它不应接受HTTP随附的请求,就像它应抛出错误
无效操作一样。。尝试使用安全连接进行请求
。我做的第一件事是在Global.asax文件中检查此项,如下所示:

  if (Utilities.Utility.HttpsCheck)
    {
        if (!Request.IsSecureConnection)
        {
            Response.Write("Invalid Operation");
        }
    }
在这个方法中,我得到一个异常
请求在此上下文中不可用
。我在谷歌上搜索了这个错误,知道在ASP.NET中无法访问全局文件中的
Request

我尝试的下一种方法是在我的项目的每一页中添加上述代码,并在处理请求之前进行检查。但是通过这种方式,我无法控制阻止对HTML页面的请求,我的项目中也有一些HTML页面,这些文件也需要限制

如果我在页面中包含代码,那么它只适用于该页面。。但我有一些图像/视频文件也在网站上,这些也需要限制

有没有更好的办法?请在这方面帮助我


提前感谢。

您可以将IIS配置为仅接受https。Http请求将自动重定向。下面是一个如何配置IIS的示例。


希望这有帮助

一个非常简单的方法是对Page类进行子类化,并在子类化的页面中应用您的条件。可以有一个子类表示受限,一个子类表示非受限。受限页面可以访问web配置参数的值,并根据需要重定向

public class HttpsPage : Page {


protected override void OnLoad(..)
{
 if (Utilities.Utility.HttpsCheck)
    {
        if (!Request.IsSecureConnection)
        {
            Response.Redirect(your-url);
        }
    }
}
}
那太难了。这是对您的问题的基于代码的回答,但根据您的“确切”需求,有20种更好的方法


坦率地说,如果你不确定自己在做什么,那么我会非常仔细地考虑将任何你认为需要安全套接字的东西放到web上。。。。特别是如果你放的东西不是你的

我已经实现了HTTP模块,以根据我的配置值限制对我的网站的HTTP访问。通过使用它,我可以限制HTPP对图像文件和html页面的访问。这是我的模块代码:

public void Init(HttpApplication context)
        {
            context.BeginRequest += new EventHandler(context_BeginRequest);
        }

        public void context_BeginRequest(Object source, EventArgs e)
        {
            //Code to reject the HTTP requests on basis of Config Value
            HttpApplication application = (HttpApplication)source;
            HttpContext context = application.Context;

            if (context != null)
            {
                if (Utilities.Utility.HttpsCheck)
                {
                    if (!context.Request.IsSecureConnection)
                    {
                        context.Response.StatusCode = (int)System.Net.HttpStatusCode.BadRequest;
                        context.Response.StatusDescription = "Secure connetion required";
                        context.Response.End();
                    }
                }
            }
        }

为什么不删除IIS中的http绑定?@JonEgerton-是的,我可以删除IIS中的http绑定,但有时我需要启用此http访问。。这就是为什么我每次都检查基于代码的解决方案,而不是更改IIS配置的原因。谢谢您的回复。。这一点我已经实现了,但是对于aspx页面来说,这将非常有效。但是我的web应用程序中也有一些html页面,那么对这些htm页面的访问限制呢?