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