zoukankan      html  css  js  c++  java
  • camstar portal使用webapi,vue elementui前后端分离开发

     更改在网站的App_Code下的AppStart.cs文件

     

    添加引用

    using System.Collections.Generic;
    
    using System.Net.Http;
    
    using System.Net.Http.Formatting;
    
    using System.Net.Http.Headers;
    
    using System.Text;
    
    using System.Web;
    
    using System.Web.Http;
    
    using System.Web.Http.WebHost;
    
    using System.Web.Routing;
    
    using System.Web.SessionState;
    
    using Newtonsoft.Json.Serialization;

    添加内容

    public static class WebApiConfig
    
        {
    
            public static void Register(HttpConfiguration config)
    
            {
    
                config.MapHttpAttributeRoutes();
    
                config.Filters.Add(new MesActionFilter());
    
                RouteTable.Routes.MapHttpRoute(
    
                    name: "DefaultApi",
    
                    routeTemplate: "api/{controller}/{action}/{id}",
    
                    defaults: new { id = RouteParameter.Optional }
    
                ).RouteHandler = new SessionControllerRouteHandler();
    
                config.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(new JsonMediaTypeFormatter()));
    
            }
    
        }
    
        internal class SessionControllerRouteHandler :  HttpControllerRouteHandler
    
        {
    
            protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
    
            {
    
                return new SessionRouteHandler(requestContext.RouteData);
    
            }
    
        }
    
        public class SessionRouteHandler : HttpControllerHandler, IRequiresSessionState
    
        {
    
            public SessionRouteHandler(RouteData routeData) : base(routeData)
    
            {
    
            }
    
        }
    
        /// <summary>
    
        ///  在全局设置中,使用自定义的只返回Json Result。只让api接口中替换xml,返回json。这种方法的性能是最高的!
    
        /// </summary>
    
        public class JsonContentNegotiator : IContentNegotiator
    
        {
    
            private readonly JsonMediaTypeFormatter _jsonFormatter;
    
            public JsonContentNegotiator(JsonMediaTypeFormatter formatter)
    
            {
    
                _jsonFormatter = formatter;
    
            }
    
            public ContentNegotiationResult Negotiate(Type type, HttpRequestMessage request, IEnumerable<MediaTypeFormatter> formatters)
    
            {
    
                // 对 JSON 数据使用混合大小写。驼峰式,但是是javascript 首字母小写形式.小驼峰命名法。
    
                //config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new  CamelCasePropertyNamesContractResolver();
    
                // 对 JSON 数据使用混合大小写。跟属性名同样的大小.输出
    
                _jsonFormatter.SerializerSettings.ContractResolver = new UnderlineSplitContractResolver(); //小写命名法。
    
                _jsonFormatter.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";//解决json时间带T的问题
    
                _jsonFormatter.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented;//解决json格式化缩进问题
    
                _jsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;//解决json序列化时的循环引用问题
    
                var result = new ContentNegotiationResult(_jsonFormatter, new MediaTypeHeaderValue("application/json"));
    
                return result;
    
            }
    
        }
    
        /// <summary>
    
        /// Json.NET 利用ContractResolver解决命名不一致问题
    
        /// 解决问题:通过无论是序列化还是反序列化都达到了效果,即:ProjectName -> project_name 和 project_name -> ProjectName
    
        /// </summary>
    
        public class UnderlineSplitContractResolver : DefaultContractResolver
    
        {
    
            protected override string ResolvePropertyName(string propertyName)
    
            {
    
                //return CamelCaseToUnderlineSplit(propertyName);//下划线分割命名法
    
                return propertyName.ToLower();//小写命名法
    
            }
    
            private string CamelCaseToUnderlineSplit(string name)
    
            {
    
                StringBuilder builder = new StringBuilder();
    
                for (int i = 0; i < name.Length; i++)
    
                {
    
                    var ch = name[i];
    
                    if (char.IsUpper(ch) && i > 0)
    
                    {
    
                        var prev = name[i - 1];
    
                        if (prev != '_')
    
                        {
    
                            if (char.IsUpper(prev))
    
                            {
    
                                if (i < name.Length - 1)
    
                                {
    
                                    var next = name[i + 1];
    
                                    if (char.IsLower(next))
    
                                    {
    
                                        builder.Append('_');
    
                                    }
    
                                }
    
                            }
    
                            else
    
                            {
    
                                builder.Append('_');
    
                            }
    
                        }
    
                    }
    
                    builder.Append(char.ToLower(ch));
    
                }
    
                return builder.ToString();
    
            }
    
     
    
        }
    

    修改Global.asaxc的Application_Start方法,添加代码

    GlobalConfiguration.Configure(WebApiConfig.Register);

     

    添加文件夹

     

     在网站跟目录下添加html文件夹来存放页面

     

    添加vue和elementui脚本

    Scripts/polyfill.min.js  --IE兼容性脚本

    Scripts/vue.min.js      --vue

    Scripts/element-ui.js  --elementui

    Scripts/axios.min.js   --ajax 调用api脚本

    Themes/element-ui.css   --添加elementui样式

    Themes/fonts/element-icons.ttf  --字体

    Themes/fonts/element-icons.woff  --字体

    添加页面(页面以aspx为后缀,因为菜单只能识别这个后缀名)

    vue模板

    <!DOCTYPE html>
    
    <html>
    
     
    
    <head>
    
        <meta charset="UTF-8">
    
        <title></title>
    
        <link href="../Themes/element-ui.css" rel="stylesheet" />
    
        <style>
    
            html,
    
            body,
    
            #app {
    
                height: 100%;
    
                width: 100%;
    
            }
    
        </style>
    
    </head>
    
     
    
    <body>
    
        <div id="app" style="overflow:auto">
    
           <!--页面内容-->
    
        </div>
    
        <script src="../Scripts/polyfill.min.js"></script>
    
        <script src="../Scripts/vue.min.js"></script>
    
        <script src="../Scripts/element-ui.js"></script>
    
        <script src="../Scripts/axios.min.js"></script>
    
     
    
        <script>
    
            var app = new Vue({
    
                el: '#app',
    
                data: function () {
    
                    //数据
    
                    return {
    
                     
    
                       
    
                    }
    
                },
    
                methods: {
    
                    //控件方法
    
                },
    
                watch:{
    
                    //侦听属性
    
     
    
                },
    
                computed: {
    
                    //计算属性
    
     
    
                },
    
                mounted: function () {
    
                    //界面加载完成后触发
    
            
    
                }
    
            })
    
        </script>
    
    </body>
    
     
    
    </html>
  • 相关阅读:
    对小课堂cpp的用户体验
    面试题 02.07. 链表相交 做题小结
    Leetcode 133. 克隆图 做题小结
    Leetcode 889. 根据前序和后序遍历构造二叉树-105. 从前序与中序遍历序列构造二叉树-106. 从中序与后序遍历序列构造二叉树
    图 的矩阵表示 和邻接表表示
    二叉树 常用函数 小结
    LeetCode 100. 相同的树 做题小结
    LeetCode 897. 递增顺序查找树 做题小结
    Leetcode 814. 二叉树剪枝 做题小结
    Leetcode l872. 叶子相似的树 做题小结
  • 原文地址:https://www.cnblogs.com/lidezhen/p/13888292.html
Copyright © 2011-2022 走看看