服務端採用 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
至此 服務端的全部工做都已完成,測試
若是不清楚如何搭建 vue+router+elementUI ,請自行度娘。
npm install axios
<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 代碼,再次感謝做者。