MVC - 从Web API访问会话

时间:2014-07-04 14:28:38

标签: asp.net-mvc session asp.net-web-api

使用MVC

当然,在Web API中进行身份验证后,我想为session("LoggedIn")分配值True

但我的Web API中的会话不断返回NullReference

任何解决方法?

感谢。

2 个答案:

答案 0 :(得分:0)

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);
    }

}

了解更多详情Accessing Session Using ASP.NET Web API

答案 1 :(得分:0)

您需要设置支持 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);           
        }       
    }
}