dotnet core webapi +vue 搭建先後端徹底分離web架構(一)

 

架構

服務端採用 dotnet core  webapi前端

 

前端採用: Vue + router +elementUI+axiosvue

 

 

                         

 

問題

使用先後端徹底分離的架構,首先遇到的問題確定是跨域訪問。先後端可能不在同個server上,即便先後端處在同個server上,因爲先後端徹底分離,webpack

先後端使用的端口號也多是不同的,因此必須解決跨域訪問。ios

 

具體實現

 

服務端

服務端使用的dotnetcore +webapi架構,支持cors很是簡單,只要引入Microsoft.AspNetCore.Cors 組件,全部問題就迎刃而解了。具體實現以下:git

 

建立 wepapi項目github

l  Dotnet new webapiweb

 

 

l  引入 cors組件npm

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

 

 

 

 

l  服務端目錄結構後端

 

 

 

 

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();
        }
 
 

 

 

 

l  設定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

 

 

 

 

至此 服務端的全部工做都已完成,測試

 

 

 

 

客戶端

目錄結構

 

 

搭建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

 

 

 

 

注意:response的 original ,這但是cors的關鍵所在

 

 

本文vue+elementUI+router 參考了monster1935.github.io 代碼,再次感謝做者。

相關文章
相關標籤/搜索