初识.Netcore(1)

.Netcore:微软中跨平台的软件开发平台

(1).netcore中的Request使用:

<1>:接受前台传值:

get:Request.Query["name"]

post:Request.Form["name"];

<2>获取ip地址:

 string ipaddress = HttpContext.Connection.RemoteIpAddress.ToString();

<3>请求方式get,post等:

string RequestType = HttpContext.Request.Method;

<4>获取请求地址:

 string Url = HttpContext.Request.Path;

<5>获取UserAgent浏览器信息:

 string UserAgent = HttpContext.Request.Headers["User-Agent"].FirstOrDefault();

(2).netcore中的Response使用:

<1>输出字符串:

 输出字符串前要先进行Response.ContentType = "text/html;charset=UTF-8";防止中文乱码           
  Response.Body.WriteAsync(System.Text.Encoding.UTF8.GetBytes("xx"));

<2>获得项目根目录

  string rootpath = _webHostEnvironment.ContentRootPath;

<3>获得静态资源根目录

 string WebRootPath = _webHostEnvironment.WebRootPath;

<4>编码解码

          编码,解码 处理特殊字符串例如:#,+
          WebUtility.UrlEncode("C#");//编码
          WebUtility.UrlDecode("C#");//解码

(3).netcore中的Session使用:

使用session要更新 Startup.cs 使用需要的服务:

 public void ConfigureServices(IServiceCollection services)
        {
            services.AddSession();
       }  

然后在Configure类中再启动session中间件

app.Usesession();

tips:netcore 2.2后可以直接启用session,不用自己再一次添加session依赖,本身就添加了

存储session

 HttpContext.Session.SetString("key","value");

取出session

HttpContext.Session.GetString("key");

与.netframework相比.netcore的session不能直接存储对象

session存储对象:

这里要运用到序列化和反序列化

我们给.netcore ISession session 写两个扩展方法一个是存储对象字符处的方法

一个是取出字符串转化为对象的方法方法如下:

//存储的方法(将对象转化为字符串存储到session) 
public static void SetObj<T>(this ISession session, string key, T value)
  {
            string jsonstr = JsonConvert.SerializeObject(value);
            byte[] byteArray = Encoding.Default.GetBytes(jsonstr);
            session.Set(key, byteArray);
 }
//取出的方法(将字符串取出后根据传入的对象类型进行反序列化)
public static T Get<T>(this ISession session, string key)
        {
            byte[] byteArray;
            bool isvalue = session.TryGetValue(key, out byteArray);
            if (isvalue)
            {
                string str = Encoding.Default.GetString(byteArray);
                T val = JsonConvert.DeserializeObject<T>(str);
                return val;
            }
            else
            {
                return default(T);
            }
        }

有了这两个扩展方法session就可以存储对象类型的值了

(4).netcore中的Cookie使用:

存储:

Httpcontext.Response.Cookies.Append("pwd","123456");

取出:

string val=null;

HttpContext.Request.Cookies.TryGetValue("pwd",out val);

(5).netcore中的筛选器使用:

.netcore中的筛选器和.netframework中的过滤器其实差不多

认识一些常见的筛选器:

授权筛选器

最先运行:用于权限类操作 如果未授权可以让管道短路。

操作筛选器 :

可以在调用单个操作方法之前和之后立即运行代码。他们可用于处理某个操作的参数以及从

改操作返回的结果。不可再Razor Pages中使用操作筛选器。

异常筛选器

对未处理的异常应用全局策略

结果筛选器

可以在执行单个操作方法之前和之后立即运行代码。当操作成功时才会执行

注册筛选器:

Startup.cs的ConfigureServices类中注册:

 services.AddMvc(a =>
            {
               a.Filters.Add(new MyAuthorFilter());
            });

---------------------------------------------------------------------------------------------------------------------------------

内置筛选器属性:

ASP.NET Core 包含许多可子类化和自定义的基于属性的内置筛选器。 例如,以下结果筛选器会向响应添加标头:

public class AddHeaderAttribute : ResultFilterAttribute
{
    private readonly string _name;
    private readonly string _value;

    public AddHeaderAttribute(string name, string value)
    {
        _name = name;
        _value = value;
    }

    public override void OnResultExecuting(ResultExecutingContext context)
    {
        context.HttpContext.Response.Headers.Add( _name, new string[] { _value });
        base.OnResultExecuting(context);
    }
}

在要使用的action中使用特性添加就可以了


 效果如下:

 --------------------------------------------------------------------------------------------------------------------------------

一个简单的权限筛选器(实现IAuthorizationFilter接口):

我们写一个如果没有传入name值为niu的控制器则跳转到home下面的Privacy的控制器下

 public class MyAuthorFilter : IAuthorizationFilter
    {
        public void OnAuthorization(AuthorizationFilterContext context)
        {
           // throw new NotImplementedException();
         
            if (HasAllowAnonymous(context))
            {
                return;
            }
            string name = context.HttpContext.Request.Query["name"];
            if (name!="niu") {
               //跳转控制器
                context.Result = new RedirectToActionResult("Privacy", "home", null);
            }
        }
        //用于判断Action有没有AllowAnonymous标签,微软写的(我们用于防止死循环)
        private bool HasAllowAnonymous(AuthorizationFilterContext context)
        {
            var filters = context.Filters;
            for (var i = 0; i < filters.Count; i++)
            {
                if (filters[i] is IAllowAnonymousFilter)
                {
                    return true;
                }
            }

            var endpoint = context.HttpContext.GetEndpoint();
            if (endpoint?.Metadata?.GetMetadata<IAllowAnonymous>() != null)
            {
                return true;
            }

            return false;
        }
    }

我们在home下面的Privacy控制器上面加一个特性防止死循环

 一个简单的权限控制器就写好了。

今天先学到这吧。呼

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值