using System; using System.Net; using System.Net.Http; using System.Text; using System.Threading.Tasks; using System.Web.Http; using System.Web.Http.Controllers; using System.Web.Http.Filters; using Microsoft.Owin; using Owin; [assembly: OwinStartup(typeof(HH.WCS.NongFuChaYuan.ApiService.Startup))] namespace HH.WCS.NongFuChaYuan.ApiService { public class Startup { public void Configuration(IAppBuilder app) { // 有关如何配置应用程序的详细信息,请访问 https://go.microsoft.com/fwlink/?LinkID=316888 HttpConfiguration config = new HttpConfiguration(); config.Routes.MapHttpRoute( name:"DefaultApi", routeTemplate:"api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } ); // Web API routes config.MapHttpAttributeRoutes(); //WebApiConfig.Register(config); app.UseWebApi(config); } } /// /// 基础身份验证特性 接口上增加标识:[BasicAuthentication] 即可使用 /// 传参:参数名:Authorization 参数值:Basic admin:123 --Basic后面需要加空格 /// public class BasicAuthenticationAttribute : ActionFilterAttribute { public override void OnActionExecuting(HttpActionContext actionContext) { //检验用户ticket信息,用户ticket信息来自调用发起方 if (actionContext.Request.Headers.Authorization != null) { //解密用户ticket,并校验用户名密码是否匹配 var encryptTicket = actionContext.Request.Headers.Authorization.Parameter;//请求信息中验证信息的参数 if (ValidateUserTicket(encryptTicket))//自定义的判断身份方法 base.OnActionExecuting(actionContext);//通过身份验证则继续执行Controller方法 else { actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);//请求状态设置为 401 认证不通过 actionContext.Response.Content = new StringContent("权限不足", Encoding.UTF8, "application/json");//返回错误信息 //LogHelper } } else//请求中没有添加验证信息,则返回错误 { actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized); string err = "拒绝访问,请先添加验证信息后,在访问此接口!"; actionContext.Response.Content = new StringContent(err, Encoding.UTF8, "application/json"); } } /// /// 校验用户ticket信息 /// /// /// private bool ValidateUserTicket(string encryptTicket) { //默认授权码 admin:123 //string userpwd = Encoding.Default.GetString(Convert.FromBase64String(encryptTicket));//参数中的验证信息,转为string return encryptTicket.Equals("admin:123"); } } }