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;

      

  • 相关阅读:
    apache 虚拟主机配置(根据不同的域名映射到不同网站)
    Tortoise SVN 使用笔记
    Apache 根据不同的端口 映射不同的站点
    jquery 获取当前元素的索引值
    修改ThinkPHP的验证码类
    NetBeans无法使用编码GBK安全地打开该文件
    在win2003下apache2.2无法加载php5apache2_4.dll
    我看软件工程
    PHP函数参数传递(相对于C++的值传递和引用传递)
    Notepad++ 使用正则表达式查找替换字符串
  • 原文地址:https://www.cnblogs.com/lizhenhong/p/10002601.html
Copyright © 2011-2022 走看看