1. 程式人生 > >dotnet core webapi +vue 搭建前後端完全分離web架構(一)

dotnet core webapi +vue 搭建前後端完全分離web架構(一)

cal ade 跨平臺 onf env ans loading p s response

摘要: 架構 服務端采用 dotnet core webapi 前端采用: Vue + router +elementUI+axios 問題 使用前後端完全分離的架構,首先遇到的問題肯定是跨域訪問。

架構

服務端采用 dotnet core webapi

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

技術分享圖片

問題

使用前後端完全分離的架構,首先遇到的問題肯定是跨域訪問。前後端可能不在同個server上,即使前後端處在同個server上,由於前後端完全分離,

前後端使用的端口號也可能是不一樣的,所以必須解決跨域訪問。

具體實現

服務端

服務端使用的dotnetcore +webapi架構,支持cors非常簡單,只要引入Microsoft.AspNetCore.Cors 組件,所有問題就迎刃而解了。具體實現如下:

創建 wepapi項目

l Dotnet new webapi

技術分享圖片

l 引入 cors組件

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

技術分享圖片

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

}

設定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的關鍵所在

原文發布時間:2018-6-19

原文作者:dotNET跨平臺

本文來源掘金如需轉載請緊急聯系作者

dotnet core webapi +vue 搭建前後端完全分離web架構(一)