IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> 初识.Netcore(1) -> 正文阅读

[开发测试]初识.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控制器上面加一个特性防止死循环

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

今天先学到这吧。呼

?

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-12-15 18:35:34  更:2021-12-15 18:36:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 7:32:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码