前言

上次发表了《一键生成Vue.js + Web API前后端集成项目》后,有多位网友来问,有不有其他的前后端集成模板:

VS2022开发docker VS2022开发vue_python

VS2022开发docker VS2022开发vue_python_02

实际上,VS2022没有提供前后端集成项目模板。

但是,使用VS2022,同样可以轻松实现React/Angular/Vue.js + Web API前后端集成。

实现方式

1.创建前端项目

打开VS2022, 在新建项目窗口搜索"Standalone",可以看到React/Angular/Vue.js的项目模板,并可选择使用JS还是TS:

VS2022开发docker VS2022开发vue_VS2022开发docker_03

下面还是以Vue.js为例讲解,其他前端框架同样操作。

选择“Standalone TypeScript Vue Template”,在“其他信息”窗口,一定要记住勾选Add integration for Empty ASP.NET Web API Project

VS2022开发docker VS2022开发vue_VS2022开发docker_04

点击“创建”按钮后,会自动执行vue CLI下载相关依赖: 

VS2022开发docker VS2022开发vue_python_05

创建完成后,你会发现只有前端项目。后端在哪?

2.添加后端项目

在解决方案资源管理器,右键点击解决方案名称,选择"添加"->"新建项目",选择“ASP.NET Core Web API”,按照正常方式创建Web API项目。

VS2022开发docker VS2022开发vue_VS2022开发docker_06

OK,前后端项目已经创建完成了,项目结构如下:

VS2022开发docker VS2022开发vue_java_07

但是,想要能够实现集成调试,我们还需要进行如下操作。

3.调试

打开WebApplication1项目Properties目录下的launchSettings.json文件,找到API启动地址:

VS2022开发docker VS2022开发vue_VS2022开发docker_08

然后,打开vueproject1项目的vue.config.js,修改proxy为对应地址:

VS2022开发docker VS2022开发vue_vue_09

接着,右键点击解决方案名称,选择"属性",修改为多个启动项目:

VS2022开发docker VS2022开发vue_VS2022开发docker_10

最后,F5启动解决方案,可以看到访问了正确的后端服务:

VS2022开发docker VS2022开发vue_python_11

但是,别高兴太早,虽然调试成功了,要想部署成前后端集成项目,我们还要做点工作。

4.部署

打开vueproject1项目的vue.config.js,修改module.exports,增加outputDir,值为"../WebApplication1/wwwroot":

VS2022开发docker VS2022开发vue_python_12

它的作用,是将前端部署文件输出到Web API指定目录。

然后,修改WebApplication1项目的Program.cs,加入如下代码:

app.UseDefaultFiles();
app.UseStaticFiles();

VS2022开发docker VS2022开发vue_VS2022开发docker_13

它的作用,是启用静态文件服务,由Web API承载前端文件显示。

最后,修改WebApplication1.csproj文件,增加如下内容:

<Target Name="PublishRunWebpack" AfterTargets="ComputeFilesToPublish">
    <Exec WorkingDirectory="$(ProjectDir)\..\vueproject1" Command="npm run build -- --prod" />

    <ItemGroup>
        <DistFiles Include="wwwroot\**" />
        <ResolvedFileToPublish Include="@(DistFiles->'%(FullPath)')" Exclude="@(ResolvedFileToPublish)">
            <RelativePath>%(DistFiles.Identity)</RelativePath>
            <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
        </ResolvedFileToPublish>
    </ItemGroup>
</Target>

它的作用,是发布Web API时自动编译前端项目,并将wwwroot所有文件复制到发布目录下。

现在,就是见证奇迹的时刻。

执行WebApplication1的发布操作,它会自动执行npm run build,将前端代码编译输出到wwwroot目录下,发布目录结构如下:

VS2022开发docker VS2022开发vue_python_14

运行WebApplication1.exe,访问http://localhost:5000,可以看到调用的还是相同端口下的后端API:

VS2022开发docker VS2022开发vue_vue_15

结论

虽然VS2022没有提供前后端集成项目模板,但是,经过我们的改造,同样可以轻松实现React/Angular/Vue.js + Web API前后端集成。