zoukankan      html  css  js  c++  java
  • dotnet core webapi +vue 搭建前后端完全分离web架构(一)

    摘要: 架构 服务端采用 dotnet core  webapi   前端采用: Vue + router +elementUI+axios            问题 使用前后端完全分离的架构,首先遇到的问题肯定是跨域访问。

    架构

    服务端采用 dotnet core  webapi

     

    前端采用: Vue + router +elementUI+axios

     

    640?wx_fmt=png&wxfrom=5&wx_lazy=1

            

    问题

    使用前后端完全分离的架构,首先遇到的问题肯定是跨域访问。前后端可能不在同个server上,即使前后端处在同个server上,由于前后端完全分离,

    前后端使用的端口号也可能是不一样的,所以必须解决跨域访问。

     

    具体实现

     

    服务端

    服务端使用的dotnetcore +webapi架构,支持cors非常简单,只要引入Microsoft.AspNetCore.Cors 组件,所有问题就迎刃而解了。具体实现如下:

     

    创建 wepapi项目

    l  Dotnet new webapi

     640?wx_fmt=png

     

    l  引入 cors组件

    dotnet add package Microsoft.AspNetCore.Cors --version 2.0.1

     

     640?wx_fmt=png

     

     

    l  服务端目录结构

     640?wx_fmt=png

      

    l  添加 cors服务

     

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)

            {

                if (env.IsDevelopment())

                {

                    app.UseDeveloperExceptionPage();

                }

     

                 //添加cors 服务

                services.AddCors(options => 

                                         options.AddPolicy("CorsSample",p => p.WithOrigins("http://localhost:5000")

                .AllowAnyMethod().AllowAnyHeader()));

     

                app.UseMvc();

            }

     设定header original

     

    public void ConfigureServices(IServiceCollection services)

     

            {

     

                services.AddMvc();

     

                //配置Cors

                app.UseCors("CorsSample");

     

            }

    l  修改controller的 get 方法

     

    namespace webApiDemo1.Controllers

    {

        [Route("api/[controller]")]

        public class ValuesController : Controller

        {

            // GET api/values

            [HttpGet]

            [EnableCors("CorsSample")]

            public IEnumerable<string> Get()

            {

                return new string[] { DateTime.Now.ToString() };

            }

     

        }

    }

    l  编译与运行 webapi

     

    dotnet run

     640?wx_fmt=png

     

     

     

    至此 服务端的所有工作都已完成,测试

     

     640?wx_fmt=png

     

     

    客户端

    目录结构

    640?wx_fmt=png

     

     

    搭建webpack 下Vue + router +elementUI

    如果不清楚如何搭建 vue+router+elementUI ,请自行度娘。

    引入axios 组件

    npm install axios

     

    创建单页组件UserInfo.vue

    <template>

     

      <div class="userList">

     

           <el-button type="primary"  @click="handleClick">获取服务端时间</el-button>

     

           <p>call from server:{{msg}}</p>

     

      </div>

     

    </template>

     

    <script>

     

      import axios from 'axios';

     

      export default{

     

        data(){

     

          return {

     

              msg:""

     

          }

     

        },

     

        methods: {

     

           handleClick(evt) {

     

            let _self=this;

     

            axios.get('http://localhost:5000/api/Values')

     

                 .then(function (response) {

     

                     //debugger;

     

                     console.log(response);

     

                     _self.msg=response.data;

     

                 })

     

                .catch(function (error) {

     

                  console.log(error);

     

                });

     

           }

     

        }

     

      }

     

    </script>

    <style scoped>

     

    .userList

     

    {

     

       padding-top: 10px;

     

    }

     

    </style>

    运行效果

    npm run dev

     

    640?wx_fmt=png

      

    注意:response的 original ,这可是cors的关键所在 

     

    原文发布时间:2018-6-19

    原文作者:dotNET跨平台

    本文来源掘金如需转载请紧急联系作者

  • 相关阅读:
    高性能Ajax
    git基本操作
    文本字数过多时,以省略号显示
    前端开发环境工具汇总
    无阻赛的脚本(js脚本延迟方法)
    SparkContext的初始化(伯篇)——运行环境与元数据清理器
    java中的内部类和匿名内部类的使用
    SpringMVC拦截器中通过反射得到Controller方法注解时ClassCastException解决方式
    EM算法-数学原理及其证明
    Eclipse 创建 Maven 项目、Maven JavaWeb 项目
  • 原文地址:https://www.cnblogs.com/dragon2017/p/9404334.html
Copyright © 2011-2022 走看看