3

基本上是一个我们分发给客户的网络应用程序,其中一个人将试用它,所以我需要能够在某个时候将其关闭。不想将结束日期放在 web.config 中,以防万一他们发现他们可以更改它,我想在 global.asax 中放置一些带有硬编码日期的东西,但是我不确定我是如何做到的可以“关闭”应用程序。我正在考虑检查 Authenticate Request 部分中的日期并简单地重定向到显示您的试用已完成(或类似内容)的页面,但有更好的方法吗?

4

2 回答 2

3

你可以这样做global.asax

protected void Application_BeginRequest(Object sender, EventArgs e)
{
   if(DateTime.UtcNow > cTheTimeLimitDate)
   {
        HttpContext.Current.Response.TrySkipIisCustomErrors = true;
        HttpContext.Current.Response.Write("...message to show...");
        HttpContext.Current.Response.StatusCode = 403;
        HttpContext.Current.Response.End();
        return ;    
   }    
}

这比将它放在 web.config 上更安全,但没有什么是足够安全的。将他们重定向到一个页面,或者不向他们显示消息,或者你的想法更好。

要重定向到页面,您还需要检查是否调用了页面,代码如下:

protected void Application_BeginRequest(Object sender, EventArgs e)
{
   string cTheFile = HttpContext.Current.Request.Path;
   string sExtentionOfThisFile = System.IO.Path.GetExtension(cTheFile);
   if (sExtentionOfThisFile.Equals(".aspx", StringComparison.InvariantCultureIgnoreCase))
   {
     // and here is the time limit.
     if(DateTime.UtcNow > cTheTimeLimitDate)
     {
        // make here the redirect
        HttpContext.Current.Response.End();
        return ;    
    }    
  }
}

为了让它变得更加困难,您可以制作一个自定义 BasePage ,所有页面都来自它(而不是来自System.Web.UI.Page),并在那里对页面的呈现设置限制 - 或者在每个页面呈现的顶部显示一条消息,即时间是结束。

public abstract class BasePage : System.Web.UI.Page
{
    protected override void Render(System.Web.UI.HtmlTextWriter writer)        
    {
        if(DateTime.UtcNow > cTheTimeLimitDate)
        {
            System.IO.StringWriter stringWriter = new System.IO.StringWriter();

            HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter);

            // render page inside the buffer
            base.Render(htmlWriter);

            string html = stringWriter.ToString();

            writer.Write("<h1>This evaluation is expired</h1><br><br>" + html);         
        }
        else
        {
            base.Render(writer);
        }
    }
}
于 2012-10-25T08:29:48.160 回答
0

只需添加 app_offline.htm,您甚至可以为您的用户创建一条好消息。此外,让网站重新上线也很容易,只需删除或重命名 app_offline.htm。

http://weblogs.asp.net/dotnetstories/archive/2011/09/24/take-an-asp-net-application-offline.aspx

于 2012-10-25T08:33:36.923 回答