zoukankan      html  css  js  c++  java
  • WebApi设置HttpContext.Current.User

    1、Web.config配置上system.web节点下加入以下配置

    <system.web>
        <authentication mode="Forms">
          <forms name=".wechat" loginUrl="url" timeout="30" protection="All" defaultUrl="/index.html" />
        </authentication>
        <httpCookies httpOnlyCookies="true" requireSSL="true" />
      </system.web>
    

    2、上代码

    using Newtonsoft.Json;
    using System;
    using System.Security.Principal;
    using System.Web;
    using System.Web.Http;
    using System.Web.Security;
    
    namespace KMHC.CTMS.DrugStore.Controllers
    {
        public class BaseApiController : ApiController
        {
            protected void SignIn(dynamic user)
            {
                if (user == null)
                    return;
                var httpContext = HttpContext.Current;
    
                var version = 1;
                var name = user.OpenId;
                var now = DateTime.Now.ToLocalTime();
                var expiration = now.Add(TimeSpan.FromDays(30));
                var isPersistent = true;
                var userData = JsonConvert.SerializeObject(user);
    
                var ticket = new FormsAuthenticationTicket(version, name, now, expiration, isPersistent, userData, FormsAuthentication.FormsCookiePath);
    
                var encryptedTicket = FormsAuthentication.Encrypt(ticket);
    
                var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket)
                {
                    HttpOnly = true,
                    Secure = FormsAuthentication.RequireSSL,
                    Path = FormsAuthentication.FormsCookiePath
                };
                cookie.Expires = ticket.Expiration;
                if (FormsAuthentication.CookieDomain != null)
                {
                    cookie.Domain = FormsAuthentication.CookieDomain;
                }
    
                var url = HttpContext.Current.Request.Url.ToString();
                if (!string.IsNullOrEmpty(url) && url.StartsWith("https"))
                {
                    cookie.Secure = true;
                }
    
                httpContext.Response.Cookies.Add(cookie);
    
                httpContext.User = new GenericPrincipal(new FormsIdentity(ticket), new string[] { "Wechat" });
            }
    
            protected string OpenId
            {
                get
                {
                    return this.User.Identity.Name;
                }
            }
    
            protected bool IsAuthenticated
            {
                get
                {
                    return this.User.Identity.IsAuthenticated;
                }
            }
    
            protected dynamic UserInfo {
                get {
                    var identity = (FormsIdentity)HttpContext.Current.User.Identity;
                    var user = JsonConvert.DeserializeObject<dynamic>(identity.Ticket.UserData);
                    return user;
                }
            }
        }
    }
    

    3、默认地址获取

    //index.html  <forms name=".wechat" loginUrl="url" timeout="30" protection="All" defaultUrl="/index.html" />
    var defaultUrl= FormsAuthentication.DefaultUrl;

      

  • 相关阅读:
    STL——increment/decrement/dereference操作符
    STL——静态常量整数成员在class内部直接初始化
    STL——临时对象的产生与运用
    C++中模板类使用友元模板函数
    模板编程中的技巧
    plsql 表数据中文显示乱码(配置环境变量)
    plsql 常用快捷键(自动替换)
    javascript 跳出(终止)forEach循环
    plsql 快捷键配置
    plsql oracle client没有正确安装(plsql连接远程数据库)
  • 原文地址:https://www.cnblogs.com/lizhenhong/p/10002601.html
Copyright © 2011-2022 走看看