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;

      

  • 相关阅读:
    基于深度学习的目标检测
    Redmine发送邮件
    用7次比较完成5个元素的排序
    在GEM5模拟器运行时,对Kill命令的使用
    GDB中的backtrace命令
    [译]如何定义python源文件的文件编码
    QEMU ELF_LOAER分析[基于MIPS]
    if语句的数据驱动优化(Java版)
    解决idea中Activiti的bpmn编辑器的中文乱码问题
    最简易的PHP Storm调试模式开启方式
  • 原文地址:https://www.cnblogs.com/lizhenhong/p/10002601.html
Copyright © 2011-2022 走看看