创建ASP.NET WebApi 项目

来源:互联网 发布:佳明gps如何清除数据 编辑:程序博客网 时间:2024/05/21 06:46

1、使用VS2015创建解决方案NJLHR.Solution、项目WebApp。使用ASP.NET 4.6模板下的Web API,身份验证选择”个人用户帐户“。

2、NuGet下安装 Microsoft.Owin.Cors ,用于支持跨域访问。Startup.Auth.cs文件内的方法添加语句:

//支持跨域访问
                app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);

3、NuGet下安装 Swashbuckle ,用于 API 操作、描述,便于管理测试API。

文件 SwaggerConfig.cs 取消 c.IncludeXmlComments(GetXmlCommentsPath()); 的注释,并添加方法 GetXmlCommentsPath():

        /// <summary>

        /// 获取文档说明XML的文件路径

        /// <para>项目WebApp的属性=>生成=>勾选“XML文档文件”</para>

        /// </summary>

        /// <returns></returns>

        private static string GetXmlCommentsPath()

        {

            return System.String.Format(@"{0}\bin\WebApp.XML", System.AppDomain.CurrentDomain.BaseDirectory);

        }


文件 SwaggerConfig.cs 取消 c.IncludeXmlComments(GetXmlCommentsPath()); 的注释,并添加 AssignOAuth2SecurityRequirements 类:


    /// <summary>

    /// swagger api 增加 request headers 的参数Authorization,用于提交token值

    /// </summary>

    public class AssignOAuth2SecurityRequirements : 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 = "Authorization", @in = "header", description = "Token", required = false, type = "string" });

            }

        }

    }

0 0