【发布时间】:2014-08-25 22:07:36
【问题描述】:
使用 MVC
当然,在 Web API 中进行身份验证后,我想将值分配给 session("LoggedIn") True。
但我的 Web API 中的会话不断返回 NullReference。
有什么解决方法吗?
谢谢。
【问题讨论】:
标签: asp.net-mvc session asp.net-web-api
使用 MVC
当然,在 Web API 中进行身份验证后,我想将值分配给 session("LoggedIn") True。
但我的 Web API 中的会话不断返回 NullReference。
有什么解决方法吗?
谢谢。
【问题讨论】:
标签: asp.net-mvc session asp.net-web-api
您需要设置支持 HTTP 请求所需的会话状态行为类型。
您可以在 Global.asax 文件中的 Application_PostAuthorizeRequest() 中进行更改。
using System.Web.Http;
using System.Web;
using System.Web.SessionState;
namespace Sample
{
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
WebApiConfig.Register(GlobalConfiguration.Configuration);
}
protected void Application_PostAuthorizeRequest()
{
HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Required);
}
}
}
【讨论】:
WebApiConfig.cs
public static class WebApiConfig
{
public static string UrlPrefix { get { return "api"; } }
public static string UrlPrefixRelative { get { return "~/api"; } }
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: WebApiConfig.UrlPrefix + "/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
Global.asax.cs
public class MvcApplication : System.Web.HttpApplication
{
...
protected void Application_PostAuthorizeRequest()
{
if (IsWebApiRequest())
{
HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Required);
}
}
private bool IsWebApiRequest()
{
return HttpContext.Current.Request.AppRelativeCurrentExecutionFilePath.StartsWith(WebApiConfig.UrlPrefixRelative);
}
}