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;

      

  • 相关阅读:
    关于BigDecimal转String的准确性问题
    MyBatis动态Sql之if标签的注意事项
    Servlet与通信协议概述
    关于ThreadLocal的那些事
    MyBatis 中 @Param 注解的四种使用场景
    Mybatis中#{}与${}的区别
    如何重新加载 Spring Boot 上的更改,而无需重新启动服务器?
    jsp有哪些动作?作用分别是什么?
    forward 和redirect的区别 ?
    Eureka和ZooKeeper都可以提供服务注册与发现的功能,请说说两个的区别?
  • 原文地址:https://www.cnblogs.com/lizhenhong/p/10002601.html
Copyright © 2011-2022 走看看