ASP.NET MVC调试模式设置

时间:2014-01-28 02:50:55

标签: c# asp.net-mvc debugging razor

有没有办法为在调试模式下运行的网页设置一些默认设置?

例如,我想在调试模式下设置默认会话用户ID,但在Application_Start()中尝试此操作会导致错误:

protected void Application_Start()
{
     #if DEBUG
     Session["User"] = "1"
     #endif
}

我可以选择将它放在控制器中,但这需要大量的代码重复。

3 个答案:

答案 0 :(得分:3)

您可以使用Conditional属性并将其放在基本控制器中的方法上。像这样:

public class BaseController : Controller {
    public BaseController() {
        SetupDebugData();
    }

    [Conditional("DEBUG")]
    public void SetupDebugData() {
        Session["User"] = "1";
    }
}

SetupDebugData的调用将针对发布版本进行优化。然后,您只需从其他控制器中的此控制器继承:

public class AdminController : BaseController {
    // ...
}

答案 1 :(得分:3)

抛出错误的原因是因为Session对象与请求相关联。 Application_Start活动中没有请求。您可以将此逻辑移动到Application_AcquireRequestState事件处理程序,它可以正常工作。

    protected void Application_AcquireRequestState(object sender, EventArgs e)
    {
        if (HttpContext.Current.IsDebuggingEnabled)
        {
            HttpContext.Current.Session["user"] = "1";
        }
        else
        {
            HttpContext.Current.Session["user"] = "0";
        } 
    }

修改

经过进一步的研究,我错了。在.NET管道中,上面的事件处理程序是您可以访问会话对象的第一个位置。尚未从Application_BeginRequest中的服务器检索它,这就是为什么您仍然获得NullReferenceException的原因。我在MVC 5中测试了上面的代码并且没有问题。

此外,您不必依赖编译器常量,而是可以使用HttpContext.Current.IsDebuggingEnabled的上述语法轻松判断您是否处于调试模式。这基本上是一个包装器,用于检查compilation标记上的web.config属性并查看是否debug="true"

注意 - 您必须使用HttpContext.Current.Session的完全限定名称(如上所述),因为全局事件处理程序没有当前HttpContext的直接继承。

答案 2 :(得分:2)

是的,偏离正轨。

  public override void OnActionExecuting(ActionExecutingContext filterContext)
        {

#if(DEBUG)
            Console.WriteLine("This is debug mode");
#else
            Console.WriteLine("This is release mode");
#endif
            base.OnActionExecuting(filterContext);
        }

此代码将在MVC中工作(我从MVC3开始使用它)。请记住,在服务器上部署asp.net应用程序时,需要在web.config中设置发布版本和调试错误。