在 VS 2010 SP1 解决方案中开发的 Web 应用程序在 VS 2017 中不起作用
Web application developed in VS 2010 SP1 solution not working in VS 2017
我有一个旧版 Web 应用程序,它在带有服务包 1 的 VS 2010 中完美运行。我正在尝试将相同的解决方案迁移到 VS 2017.When 我在 2017 年打开了该解决方案并尝试 运行 它在到达 Application_EndRequest
之后点击 Application_Start
,它永远不会点击 Session_Start
事件。
我得到的 Application_EndRequest 错误是
Session state is not available in this context. at System.Web.HttpApplication.get_Session()
我的 Web 应用程序使用 MVC
架构。
我已经尝试在 webconfig
中启用会话,但仍然没有成功。
<system.web>
<pages enableSessionState="true" />
</system.web>
使用的网页版本是
<add key="webpages:Version" value="2.0.0.0" />
目标框架是
<compilation debug="true" targetFramework="4.0">
使用的 Mvc 版本是
<add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
Note 1 :
我已经解决了与此问题相关的大部分堆栈溢出问题,但没有任何方法可以解决我的问题。
更新:
protected void Application_Start()
{
AutoMapperConfiguration.Configure();
AreaRegistration.RegisterAllAreas();
}
void Application_EndRequest(object sender, EventArgs e)
{
//no code inside application end request.
}
protected void Session_Start(Object sender, EventArgs e)
{
try
{
string sessionId = Session.SessionID;
bool dbcheck = CheckDBConnection();
}
catch (Exception ex)
{
//handle execption
}
}
注意 2:session_start
本身没有命中,我根本没有评估 application_start
中的会话。我已经评论了应用程序启动中的所有代码,但仍然出现同样的问题。
我曾尝试从 VS 2015 打开相同的解决方案,它仍然是命中 Application_End 事件的相同行为,并且对象发送者中的错误是
Session = '((System.Web.HttpApplication)sender).Session' threw an exception of type 'System.Web.HttpException'
谁能帮我解决同样的问题?任何帮助将不胜感激。
我终于找到了解决办法。在我的 webconfig
文件中,定义了一个 url redirection rule
,这就是造成问题的原因。在评论
之后它运行良好
<rewrite>
<rules>
<rule name="Redirect to https" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="SeeOther" />
</rule>
</rules>
</rewrite>
我有一个旧版 Web 应用程序,它在带有服务包 1 的 VS 2010 中完美运行。我正在尝试将相同的解决方案迁移到 VS 2017.When 我在 2017 年打开了该解决方案并尝试 运行 它在到达 Application_EndRequest
之后点击 Application_Start
,它永远不会点击 Session_Start
事件。
我得到的 Application_EndRequest 错误是
Session state is not available in this context. at System.Web.HttpApplication.get_Session()
我的 Web 应用程序使用 MVC
架构。
我已经尝试在 webconfig
中启用会话,但仍然没有成功。
<system.web>
<pages enableSessionState="true" />
</system.web>
使用的网页版本是
<add key="webpages:Version" value="2.0.0.0" />
目标框架是
<compilation debug="true" targetFramework="4.0">
使用的 Mvc 版本是
<add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
Note 1 :
我已经解决了与此问题相关的大部分堆栈溢出问题,但没有任何方法可以解决我的问题。
更新:
protected void Application_Start()
{
AutoMapperConfiguration.Configure();
AreaRegistration.RegisterAllAreas();
}
void Application_EndRequest(object sender, EventArgs e)
{
//no code inside application end request.
}
protected void Session_Start(Object sender, EventArgs e)
{
try
{
string sessionId = Session.SessionID;
bool dbcheck = CheckDBConnection();
}
catch (Exception ex)
{
//handle execption
}
}
注意 2:session_start
本身没有命中,我根本没有评估 application_start
中的会话。我已经评论了应用程序启动中的所有代码,但仍然出现同样的问题。
我曾尝试从 VS 2015 打开相同的解决方案,它仍然是命中 Application_End 事件的相同行为,并且对象发送者中的错误是
Session = '((System.Web.HttpApplication)sender).Session' threw an exception of type 'System.Web.HttpException'
谁能帮我解决同样的问题?任何帮助将不胜感激。
我终于找到了解决办法。在我的 webconfig
文件中,定义了一个 url redirection rule
,这就是造成问题的原因。在评论
<rewrite>
<rules>
<rule name="Redirect to https" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="SeeOther" />
</rule>
</rules>
</rewrite>