当我调用像
这样的函数时,我无法弄清楚如何解决这个循环问题new Common.Utility.Parameter().Get(Common.Constants.Parameter.SomeParameter);
错误可能是isHttpsCookie
召回Parameter.Get()
Utility.cs
public static class Utility
{
public class Parameter
{
public string Get(string key)
{
string cookie = new Cookie().Read(key);
if (cookie == null)
{
var parameter = new Models.Parameter();
using (var db = new MyEntities())
parameter = db.Parameters.Where(w => w.Key == key).FirstOrDefault<Models.Parameter>();
if (parameter != null)
{
new Cookie().Write(key, parameter.Value);
return parameter.Value;
}
else
return string.Empty;
}
else
return cookie;
}
}
}
Cookie.cs
public class Cookie
{
private bool isHttpsCookie = Convert.ToBoolean(new Utility.Parameter().Get(Constants.Parameter.IsHttps)); // Loop here?
public string Read(string cookieName)
{
HttpCookie httpCookie = HttpContext.Current.Request.Cookies[HttpContext.Current.ApplicationInstance.GetType().BaseType.Assembly.GetName().Name + "_" + cookieName];
return httpCookie != null ? HttpContext.Current.Server.HtmlEncode(httpCookie.Value).Trim() : string.Empty;
}
public void Write(string cookieName, string cookieValue, bool isHttpCookie = true)
{
if (isHttpsCookie)
isHttpCookie = false;
var aCookie = new HttpCookie(HttpContext.Current.ApplicationInstance.GetType().BaseType.Assembly.GetName().Name + "_" + cookieName)
{Value = cookieValue, Expires = Common.Constants.Cookie.DefaultExpires, HttpOnly = isHttpCookie};
HttpContext.Current.Response.Cookies.Add(aCookie);
}
}
答案 0 :(得分:1)
显然,您的代码会陷入一种您怀疑它的递归。我遇到的问题是为什么要创建新对象只是为了调用单个方法。看起来您可以将它们作为类中的静态方法,因此不需要创建对象,因此不会循环播放。
答案 1 :(得分:1)
仔细看看你的Cookie.Write()和Parameter.Get()方法,它们互相调用。当您声明isHttpsCookie
时,请致电Parameter.Get()
。在Parameter.Get()
中,如果条件有效,则会调用Cookie.Write()
。反过来,当您致电new Cookie()
时,会再次调用isHttpsCookie
并且它会一直持续。
此代码的另一点:
if (isHttpsCookie)
isHttpCookie = false;
你试着说isHttpsCookie应该一直都是假的吗?那你为什么要宣布这个呢?
解决方案:喜欢@Takeshi说:这些方法可以声明为静态,因此不需要类声明来调用它们。
答案 2 :(得分:0)
你怀疑的是正确的。 isHttpsCookie声明让你感到悲伤。
当创建Cookie对象时,它会消失,并从您的实用程序类执行方法get,这将创建一个cookie实例。因此,你有你的递归。
您需要更改初始化isHttpsCookie的方式。也许只是初始化/检查你是否正在写。毕竟你很可能会比写作更频繁地阅读。
希望有所帮助。