导航:首页 > 净水问答 > webapi三种过滤器

webapi三种过滤器

发布时间:2021-02-11 21:29:57

『壹』 webAPI如何实现整体拦截

e things go wrong Love is meant to be a spirit that

『贰』 net webapi 能不能使用mvc的过滤

这个很有用的,13个扩展点中过滤器占重要的地位。自定义身份验证、自定义post表单时自动检测错误、自定义发生异常时的自动化处理、等等应用。一定要搞明白的。

『叁』 webapi接口监控工具有哪些

先定义一个简单的webapi,简单到差不多直接用vs2010自动生成的webapi代码。 其中的TestModle是一个简单专的class,如下 public class TestModle { public string a { get; set; } public string b { get; set; } public string c { get; set; } } 属前端页面放四个代表get,post,put,delete的按钮,在加一个div显示返回值 前端代码中加载jquery,在定义四个按钮的click事件 get和post,我习惯用$.get和$.post,当然也能用$.ajax. get直接返回webapi get的return值,post的话我就不在后端做处理了直接返回传入的值,这里只做示范 put和delete,只能用$.ajax来处理。 put的话一般用于update某个id的数据信息 delete用于删除某个id的数据,如下图所示 点击每个按钮,可以在页面上看到相应的效果

『肆』 c# webapi中优先过滤post参数(求代码实例)

用 if(sign满足){return 处理后结果} return 默认信息 就可以了

『伍』 .net core中如何在执行action前植入一个webapi过滤器

新建一个MyFilter.cs

public class MyFilter: Attribute,IAuthorizationFilter
实现 OnAuthorization 验证

public class MyFilter : Attribute,IActionFilter,IOrderedFilter
实现 OnActionExecuted(请求方法后)和专 OnActionExecuting(请求方法前)

Startup.cs中ConfigureServices方法中 注册属此MyFilter.cs

services.AddMvc(config => config.Filters.Add(new MyFilter()));



『陆』 如何在webapi中使用filter

在webapi项目中新建一个MyTestFilter类

这里需要重写两个方法
OnActionExecuting 执行前调用
OnActionExecuted 执行后调用
可以把aop操作写在相应的方法中

这里就不解释具体的aop操作了,只演示一下在方法中获得可能用到的参数
如果要在filter中获得 public string Get(string id)中的id
public override void OnActionExecuting(HttpActionContext actionContext)
actionContext.ActionArguments["id"] 或 actionContext.ActionArguments.TryGetValue("id", out data)
在filter中获得最终的返回值
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
var objectContent = actionExecutedContext.Response.Content as ObjectContent;
var value = objectContent.Value

然后再webapi项目中随便哪个带参数的get上加[MyTestFilter]

『柒』 WebAPI与传统的WebService有哪些不同

  1. WebService是利用HTTP管道实现了RPC的一种规范形式,放弃了对HTTP原生特征与语义的完备支持;而WebAPI是要保留HTTP原生特征与语义的同时实现RPC,但WebAPI的实现风格可以是千姿百态,RESTful只是实现了其中一种风格,你也可以定义一种风格,并实现

  2. WebAPI相比WebService更为轻量级、灵活、优化好的情况下,性能更有优势,但是对复杂或大型业务的描述与使用增加了无形的成本

  3. WebAPI可以更好的利用HTTP与生俱来的特征,如:缓存、代理、安全、头信息扩展,反之,部分实现方式WebService无法利用HTTP特征

  4. 本质上WebAPI与传统模式的WebService都是实现RPC,远程服务;传统的WebService只是利用了HTTP通道,进行独立的交互,但是这个交互协议可以移植到其他协议下运作,而WebAPI天生与HTTP依赖无法移植

  5. WebService与WebAPI在80端口下工作,都可以绕开默认的网络防火墙限制,因为默认下网络防火墙对系统级端口与协议下的内容是开放的

  6. WebService与RESTfulWebAPI服务端都可以使用反射来实现自动化部署,只是前者更为容易,因为存在标准的规范,后者只是开发WebAPI的推荐风格,实现上需要自己来规范与描述,处理不兼容问题;WebAPI在无反射下的业务实现更为直观接近MVC模式下的开发的应用,通用,性能更好、更为灵活,能够直接利用HTTP的动态网页技术开发接口与功能

  7. WebAPI对于交互数据的格式没有明确规定,使得其可以更好的使用在特定的软件运行平台,但是需要开发者对各种格式的支持;传统的WebService则要求使用服务的平台对数据格式强制适应,服务端的交互数据处理变得更加快捷容易,而增加了不同使用端的对服务交互困难度

『捌』 webapi filter 每一个请求都是相同的实例吗

在webapi项目中新建一个MyTestFilter类 这里需要重写两个方法 OnActionExecuting 执行前调用 OnActionExecuted 执行后调用 可以回把aop操作写在相应答的方法中 这里就不解释具体的aop操作了,

『玖』 如何使 WebAPI 自动生成漂亮又实用在线API文档

1.1 SwaggerUI

SwaggerUI 是一个简单的Restful API 测试和文档工具。简单、漂亮、易用(官方)。通过读取JSON 配置显示API. 项目本身仅仅也只依赖一些 html,css.js静态文件. 你可以几乎放在任何Web容器上使用。

1.2 Swashbuckle

Swashbuckle 是.NET类库,可以将WebAPI所有开放的控制器方法生成对应SwaggerUI的JSON配置。再通过SwaggerUI 显示出来。类库中已经包含SwaggerUI 。所以不需要额外安装。

2.快速开始

创建项目 OnlineAPI来封装网络音乐服务(示例下载) ,通过API可以搜索、获取音乐的信息和播放连接。

我尽量删除一些我们demo中不会用到的一些文件,使其看上去比较简洁。

WebAPI 安装 Swashbuckle

Install-Package Swashbuckle

代码注释生成文档说明。
Swashbuckle 是通过生成的XML文件来读取注释的,生成 SwaggerUI,JSON 配置中的说明的。
安装时会在项目目录 App_Start 文件夹下生成一个 SwaggerConfig.cs 配置文件,用于配置 SwaggerUI 相关展示行为的。如图:

将配置文件大概99行注释去掉并修改为
c.IncludeXmlComments(GetXmlCommentsPath(thisAssembly.GetName().Name));

并在当前类中添加一个方法

/// <summary>
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
protected static string GetXmlCommentsPath(string name)
{
return string.Format(@"{0}\bin\{1}.XML", AppDomain.CurrentDomain.BaseDirectory, name);
}

紧接着你在此Web项目属性生成选卡中勾选 “XML 文档文件”,编译过程中生成类库的注释文件

添加网络音乐 3个API

访问 http://<youhost>/swagger/ui/index,最终显示效果

我们通过API 测试API 是否成功运行

3.添加自定义HTTP Header

在开发移动端 API时常常需要验证权限,验证参数放在Http请求头中是再好不过了。WebAPI配合过滤器验证权限即可

首先我们需要创建一个 IOperationFilter 接口的类。IOperationFilter
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Http.Description;
using System.Web.Http.Filters;
using Swashbuckle.Swagger;

namespace OnlineAPI.Utility
{
public class HttpHeaderFilter : IOperationFilter
{
public void Apply(Operation operation, SchemaRegistry
schemaRegistry, ApiDescription apiDescription)
{
if (operation.parameters == null) operation.parameters = new
List<Parameter>();
var filterPipeline =
apiDescription.ActionDescriptor.GetFilterPipeline();
//判断是否添加权限过滤器
var isAuthorized = filterPipeline.Select(filterInfo =>
filterInfo.Instance).Any(filter => filter is IAuthorizationFilter);
//判断是否允许匿名方法
var allowAnonymous =
apiDescription.ActionDescriptor.GetCustomAttributes<AllowAnonymousAttribute>().Any();

if (isAuthorized && !allowAnonymous)
{
operation.parameters.Add(new Parameter
{
name = "access-key",
@in = "header",
description = "用户访问Key",
required = false,
type = "string"
});
}
}
}
}

在 SwaggerConfig.cs 的 EnableSwagger 配置匿名方法类添加一行注册代码
c.OperationFilter<HttpHeaderFilter>();

添加Web权限过滤器
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Web;
using System.Web.Http;
using System.Web.Http.Controllers;
using Newtonsoft.Json;

namespace OnlineAPI.Utility
{
/// <summary>
///
/// </summary>
public class AccessKeyAttribute : AuthorizeAttribute
{
/// <summary>
/// 权限验证
/// </summary>
/// <param name="actionContext"></param>
/// <returns></returns>
protected override bool IsAuthorized(HttpActionContext actionContext)
{
var request = actionContext.Request;
if (request.Headers.Contains("access-key"))
{
var accessKey = request.Headers.GetValues("access-key").SingleOrDefault();
//TODO 验证Key
return accessKey == "123456789";
}
return false;
}

/// <summary>
/// 处理未授权的请求
/// </summary>
/// <param name="actionContext"></param>
protected override void HandleUnauthorizedRequest(HttpActionContext actionContext)
{
var content = JsonConvert.SerializeObject(new {State = HttpStatusCode.Unauthorized});
actionContext.Response = new HttpResponseMessage
{
Content = new StringContent(content, Encoding.UTF8, "application/json"),
StatusCode = HttpStatusCode.Unauthorized
};
}
}
}

在你想要的ApiController 或者是 Action 添加过滤器
[AccessKey]

最终显示效果

4.显示上传文件参数

SwaggerUI 有上传文件的功能和添加自定义HTTP Header 做法类似,只是我们通过特殊的设置来标示API具有上传文件的功能
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http.Description;
using Swashbuckle.Swagger;

namespace OnlineAPI.Utility
{
/// <summary>
///
/// </summary>
public class UploadFilter : IOperationFilter
{

/// <summary>
/// 文件上传
/// </summary>
/// <param name="operation"></param>
/// <param name="schemaRegistry"></param>
/// <param name="apiDescription"></param>
public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
{
if (!string.IsNullOrWhiteSpace(operation.summary) && operation.summary.Contains("upload"))
{
operation.consumes.Add("application/form-data");
operation.parameters.Add(new Parameter
{
name = "file",
@in = "formData",
required = true,
type = "file"
});
}
}
}
}

在 SwaggerConfig.cs 的 EnableSwagger 配置匿名方法类添加一行注册代码
c.OperationFilter<UploadFilter>();

API 文档展示效果

阅读全文

与webapi三种过滤器相关的资料

热点内容
污水处理厂中控室工作内容 浏览:738
咖啡除垢剂损伤机器吗 浏览:628
居民生活用电污水处理 浏览:772
哪个硬盘驱动器升级可提升性能 浏览:737
24k纯水怎么喝 浏览:471
ro膜反渗透净 浏览:352
燃油滤芯保养怎么做 浏览:141
水处理除铁锰设备价格 浏览:957
永川区污水处理厂电话 浏览:753
纯水机进水电磁阀为什么不出水 浏览:86
瓦尔塔免维护电池加蒸馏水 浏览:455
空调滤芯积灰怎么清理 浏览:575
围岩突水处理 浏览:614
饮水机怎么放在水槽 浏览:629
酿酒为什么不能用纯净水 浏览:923
污水管路下面能用什么 浏览:842
屠宰养殖废水处理计划书 浏览:196
bt方式合同污水 浏览:734
福克斯原厂汽油滤芯是什么牌子的 浏览:391
浙江环氧树脂板 浏览:48