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

webapi过滤器

发布时间:2023-07-27 05:35:29

① 如何使 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 文档展示效果

② MVC2,MVC3,MVC4和MVC5的不同

MVC2,MVC3,MVC4和MVC5的不同:

1、查看引擎:

视图引擎负责将HTML代码从视图呈现到浏览器。

MVC 2仅使用Web窗体视图引擎( .aspx)作为默认视图引擎。

MVC3使用剃刀视图引擎( .c#和的cshtml。vbhtml (用于Visual Basic )和Web窗体视图引擎( .阿斯佩克斯)。

MVC4还使用剃刀视图引擎作为默认视图引擎,具有一些新功能,如条件属性和“波形斜线”。

2、图表、网络网格、加密、网络映像、网络邮件控制:

所有这些在MVC2中都不可用。

所有这些都在MVC3和MVC4中提供。

3、合成语法:

Web窗体视图引擎语法: < % = HTML代码%>在MVC2中。

(剃刀语法)剃刀视图引擎语法: @MVC3中的Html代码。

MVC4具有相同的剃刀视图引擎语法,但添加了新功能,如条件属性和“波形斜线”,即URL解析。

4、可用于在视图和控制器之间共享数据的对象:

模板数据、视图数据在MVC2中可用。

MVC3中提供了临时数据、视图数据、视图包。

MVC4中提供了临时数据、视图数据、视图包。

>TempData用于当前和后续请求,即当您知道要重定向的下一个视图时。

>在ViewData中,可以通过字符串作为键访问对象字典。

>在c#4.0中添加了ViewBag,它使用允许动态添加对象属性的动态功能。我们可以说ViewBag = ViewData +ViewData字典周围的动态特性。

5、jquery支持:

jquery支持在MVC2中很好。

在MVC3中,jquery支持更好。

MVC4为Jquery (如Jquery Mobile)提供了更好的支持。

6、验证:

MVC2中有客户端验证和异步控制器。

MVC3中包含不引人注目的Ajax和客户端验证、Jquery验证和JSON绑定支持。

客户端验证、Jquery验证和对MVC4异步方法的增强支持。

7、项目模板:

MVC3支持由HTML5启用的项目模板。

MVC4支持移动应用程序的许多新功能,还提供了新的移动项目模板和更新和现代化的默认模板。

8、ASP.NET MVC 5中的新功能:

(1)一个ASP网;

(2)ASP净身份;

(3)MVC模板中的引导程序;

(4)认证过滤器;

(5)过滤器覆盖。

③ c#webapi接口怎么加上安全校验

下面这几个注意事项或许可以帮你一些

1. 找到Web应用所有的输入点,找到所有的能接受用户输入的地方,漏掉输入点也就漏掉了可能存在的缝。
2. 过滤每一个输入点,为每个输入点设定相应的校验规则和边界。
3. 不要忘记校验哪些隐藏域,cookie和url参数。
4. 验证从数据库里面得到的数据,这个是最容易忽视的地方,不要相信来自数据库里面的数据就是合法的数据。
5. 你是如何做输入校验的? javascript?如果只是用javascript做客户端校验, 风险还是很大的,一定要确保加上服务端的校验,否则如果客户端禁用了javascript或者客户端代码被人工修改,非法数据还是会进入系统内部的。
6. 隐藏异常信息,再周全的校验也不可能覆盖所有的case,如果非法数据造成了系统的异常,不要将详细的异常信息暴露给客户端,这些异常信息有可能成为系统的攻击入口。

在做输入校验的时候,从“什么样的输入才是合法的”入手会降低验证失效的风险,应该只为每个输入点的输入内容制定一个有限的,刚好够用的合法范围,除此之外的所有内容都当做是非法的。而从“什么样的输入是不合法的”入手则会增加验证失效的可能,因为你不可能穷举非法的输入。

阅读全文

与webapi过滤器相关的资料

热点内容
奔驰b2000空调滤芯怎么拆 浏览:497
简述EDI应用的作用 浏览:364
丙烯腈改性丙烯酸树脂 浏览:137
高效陶瓷膜过滤器价格 浏览:241
小型废水池管道怎么排放 浏览:446
水加错可以除去水垢吗 浏览:912
阳离子交换器再生作业指导书 浏览:160
北京大元厂家污水提升泵 浏览:156
后牙树脂充填步骤 浏览:256
净水器一次性杯子多少钱 浏览:233
柠檬酸除垢剂可以洗瓷砖 浏览:788
无机空气滤芯是什么 浏览:994
放污水提升泵井尺寸 浏览:821
金鱼缸底滤如何换滤芯 浏览:559
陶氏ro膜废水多不多 浏览:633
纯水处理中res是什么意思 浏览:527
泽德污水提升器好用不 浏览:582
河北污水间异味治理一次多少钱 浏览:711
叶绿体在蒸馏水中 浏览:395
纯水机什么时候会再次制水 浏览:822