webapi

WebAPI学习笔记(1)实现Basic Auth基本授权验证

自闭症网瘾萝莉.ら 提交于 2019-12-01 21:51:37
1、Http基本认证只需要添加新的认证过滤属性。该属性类继承自 System.Web.Http.AuthorizeAttribute,在 IsAuthorized(...)方法中读取Http 头部Authorization字段及其值,进行自定义验证。 1 public class HttpBasicAuthAttribute : System.Web.Http.AuthorizeAttribute 2 { 3 public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext) 4 { 5 //从http请求的头里面获取身份验证信息,验证是否是请求发起方的ticket 6 var authorization = actionContext.Request.Headers.Authorization; 7 if ((authorization != null) && (authorization.Parameter != null)) 8 { 9 //解密用户ticket,并校验用户名密码是否匹配 10 var encryptTicket = authorization.Parameter; 11 if (ValidateTicket

在.netcore webapi项目中使用后台任务工具Hangfire

痞子三分冷 提交于 2019-12-01 17:08:35
安装Hangfire   在webapi项目中通过nuget安装Hangfire.Core,Hangfire.SqlServer,Hangfire.AspNetCore,截止到目前的最新版本是1.7.6。 使用MSSQL数据库   可以创建一个新的数据库,或者使用现有数据库。 CREATE DATABASE [HangfireTest] GO 设置appsettings.json { "ConnectionStrings": { "Hangfire": "Server=.;Database=mssqllocaldb;Integrated Security=SSPI;" }, "Logging": { "LogLevel": { "Default": "Warning", "Hangfire": "Information" } }, "AllowedHosts": "*" } 注册hangfire服务   在startup.cs引用 Hangfire 和 Hangfire.SqlServer ,然后注册hangfire服务。 // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices

vs webapi 取消controller

半世苍凉 提交于 2019-12-01 15:12:00
1、添加引用 using Panda.DynamicWebApi; 2、starup.cs public void ConfigureServices(IServiceCollection services) { //注入HttpContextAccessor services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>(); //启动缓存 services.AddMemoryCache(); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); services.AddMvc(options => { options.Filters.Add<HttpGlobalExceptionFilter>(); }); //自动生成Api文档 services.AddSwaggerGen(options => { options.SwaggerDoc("v1", new Swashbuckle.AspNetCore.Swagger.Info { Version = "v1", Title = "API", Description = "OpenApi文档" }); options.DocInclusionPredicate(

部署webapi,singalR的坑

ε祈祈猫儿з 提交于 2019-12-01 13:33:10
我的系统是win2008,iis7.部署webapi后,应用池只能用经典模式。且要添加一个映射: api/* 指向: C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll 那为什么集成模式不行呢,微软这么说: http://www.asp.net/mvc/overview/older-versions-1/deployment/using-asp-net-mvc-with-different-versions-of-iis-cs 它提供两个方案,1、使用文件后缀名,比如 /Product.mvc/Details/3 添加.mvc 或 .aspx等后缀。 2、添加对 * 的映射到asp.net。 (还不知道会不会对静态文件有影响) 总之,我没有测试上面的方法。退一步,还是改成经典模式算了。 SingalR呢,直接要求IIS8.0才支持websocket. 而IIS7不能升级,除非升级系统。 微软说:"Note that for SignalR to use WebSockets, Windows Server 2012 or Windows 8 is required" for SignalR to use WebSocket, IIS 8 or IIS 8 Express must be used, the

WebApi 全局异常与局部异常

北城以北 提交于 2019-12-01 12:37:11
全局异常过滤器 public class ApiExceptionFilter:ExceptionFilterAttribute { private IHostingEnvironment _env; public ApiExceptionFilter(IHostingEnvironment env) { _env = env; } public override void OnException(ExceptionContext context) { if (context.ExceptionHandled) { return; } var exMsg = context.Exception.Message; ApiResp resp = new ApiResp(ApiRespCode.E999999,exMsg); // 开发环境显示异常信息 if(_env.IsDevelopment()) { resp.Message = exMsg; } context.Result = new JsonResult(resp); context.ExceptionHandled = true; } } 在startup添加这个异常过滤器 services.AddMvc(options=> { options.MaxModelValidationErrors = 5; //

使用WebAPI流式传输大文件(在IIS上大于2GB)

半腔热情 提交于 2019-12-01 04:31:26
这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数 下面直接贴代码吧,一些难懂的我大部分都加上注释了: 上传文件实体类: 看得出来,实体类中已经有很多我们需要的功能了,还有实用的属性。如MD5秒传的信息。 publicclassFileInf { public FileInf(){} publicStringid=""; publicStringpid=""; publicStringpidRoot=""; /** * 表示当前项是否是一个文件夹项。 */ publicbooleanfdTask=false; // /// 是否是文件夹中的子文件 /// publicbooleanfdChild=false; /** * 用户ID。与第三方系统整合使用。 */ publicintuid=0; /** * 文件在本地电脑中的名称 */ publicStringnameLoc=""; /** * 文件在服务器中的名称。 */ publicStringnameSvr=""; /** * 文件在本地电脑中的完整路径。示例:D:\Soft\QQ2012.exe */ publicStringpathLoc=""; /** * 文件在服务器中的完整路径。示例:F:\\ftp\\uer\\md5.exe */

net core WebApi——定时任务Quartz

╄→гoц情女王★ 提交于 2019-11-30 23:53:46
原文: net core WebApi——定时任务Quartz 目录 前言 Quartz 测试 问题及解决方法 小结 前言 本来打算昨天都开始写这篇,就因为要把小团队的博客整理汇总,一看二哈的博客那么多,一个个复制粘贴肯定麻烦(其实是我自己觉得复制麻烦),所以穿插着写了个小爬虫,后续写差不多了就拿出来晾晾吧(py菜鸡水平)。 之前开发的时候,忽略了记录,等到想写点儿啥跟后台有关的东西的时候,还得一点点回忆,最近是因为同事给我说,"哎,每个月把数据给我统计下做个界面展示啊"。一想到每个月我要做次操作就头疼,咦,不对,这不就是写个 定时任务 就搞定了嘛。 Quartz 其实在选这个定时器的类库的时候,我在 Hangfire 两者间徘徊,后来是想到不管用什么方法什么工具都是次要的,主要看你怎么用,用到哪,图形界面是需要但不是必要,分秒级别的控制也都是看你自己业务需要,定时器就后台挂起运行就行了没必要让我看见,想操作了再说吧,就这样愉快的决定使用 Quartz 。 首先,依然是在我们Util的工程引入包。 引入完成后,在我们的入口Startup中添加实例的注册声明。 public IServiceProvider ConfigureServices(IServiceCollection services) { ServiceInjection.ConfigureRepository

net core WebApi——缓存神器Redis

别说谁变了你拦得住时间么 提交于 2019-11-30 23:53:37
原文: net core WebApi——缓存神器Redis 目录 前言 Redis 使用 RedisUtil 测试 小结 前言 中秋过完不知不觉都已经快两周没动这个工程了,最近业务需要总算开始搞后台云服务了,果断直接net core搞起,在做的中间遇到了不少问题,这个后续会一点点列出来包括解决方法,今天就先把之前挖的坑填一个。 Redis 之前在缓存那篇提到过, Cookie , Session , Cache 这几个不同的缓存方式,Cookie是存在客户端浏览器的,Session实质上也是客户端的存储,至于Cache是服务端的,但是如果是分布式的话,这几个方式可能除了Cookie其他两个都要有点儿问题,毕竟一台服务只存储自身一台,如果多台的话,需要涉及到多服务的交互,比如一台服务做了Cache存储,需要给其他服务发送内部信号或是http请求,其他服务根据请求执行对应操作。 当然这是在没有用到 Redis 的前提下,Redis是解决分布式缓存的神器,相当于是自身一台服务器专门处理数据的读写,可以理解为数据服务器(个人感觉。。。),至于自己业务的分布式只是为了业务需要去执行,需要用到数据缓存即可直接调用Redis的读写操作(当然,各个服务的Redis配置要保持一致)。 Redis的安装和配置在 Linux配置部署_新手向(四)——Redis安装与配置 已经说过

.Net core webapi的常用Test方法

谁说胖子不能爱 提交于 2019-11-30 22:13:18
第一种:使用ServicProviderHelper类,配置appsetting.json配置及依赖的服务 ServiceProviderHelper类,创建静态的ServiceProvider依赖注入服务器 public class ServiceProviderHelper { private static ServiceProvider _serviceProvider { get; set; } public static ServiceProvider ServiceProvider { get { if (_serviceProvider == null) { IConfiguration Configuration = new ConfigurationBuilder() .SetBasePath(AppContext.BaseDirectory) .AddJsonFile("appsettings.json") .Build(); //IConfiguration Configuration = new ConfigurationBuilder().SetBasePath("appsettings.json").Build(); var services = new ServiceCollection(); services.AddMvc((mvcOption =>

WebAPI跨域问题处理

孤人 提交于 2019-11-30 21:39:01
  1、按照 https://dzone.com/articles/access-control-allow-origin-header-and-the-aspnet 文章所述,在程序中配置允许跨域请求。   但是请求依然出错。   2、错误信息如下:     Response to preflight request doesn't pass access control check: It does not have HTTP ok status.   3、在服务器端浏览器尝试请求接口数据     错误信息如下:          解决办法:          注释掉如上信息即可正常访问。 来源: https://www.cnblogs.com/lyyd/p/11641325.html