好吧,这可能只是我无知,但我的MVC3应用程序中有以下路径:
routes.MapRoute("Directory","{aid}/{controller}/{action}/{year}/{quarter}",
new { aid = "sf", controller = "Lobbyist", action = "Index",
year = CurrentYear(), quarter = CurrentQuarter() });
在我的Global.asax.cs中,我有以下两种方法:
public static int CurrentQuarter()
{
int quarter = 0;
//...use some internal business logic to determine the value of
//'quarter' based on the current date...
return quarter;
}
public static int CurrentYear()
{
return DateTime.Now.Year;
}
此代码始终非常适合 。在某个时间点,在我们的生产环境(运行IIS7)中,当它应该是1,2,3或4时,CurrentQuarter()的路由值变为零值。它在生产中工作得很好,除了那个时间点。 IISRESET'修复'了这个问题。
我所知道的:
我的问题真的归结为:
我在这里抓住稻草!
感谢您的任何建议。
答案 0 :(得分:1)
我不会在这里调用静态值。我完全不同意以上的伊戈尔。它不标准,很难追踪这些值来自不知道应用程序的人。从控制器调用它,或者甚至更好 - 控制器调用的服务层(即业务逻辑)获取此值。
路由目的不是调用业务方法。
关于第二个问题,如果有应用程序池回收,则只会重置该值。但是,如果多个线程调用此方法并可能在同一方法中更改值,我将在其中实现一些锁定以防止更新重叠。
答案 1 :(得分:0)
您应该将路径值year和quarter设置为可选,并在Action方法中为它们提供默认值。我认为这使得一切都更清洁,更容易维护。
public class LobbyistController
{
public ActionResult Index(int? year, int? quarter)
{
if (!currentYear.HasValue)
{
currentYear = GetCurrentYear();
}
if (!currentQuarter.HasValue)
{
currentQuarter = GetCurrentQuarter();
}
// the rest
}
}