将WebAPI和MVC项目发布到同一个Azure网站?

12

我在 Visual Studio 中有两个独立的项目 - 一个是 WebAPI,另一个是 MVC 网站...

我能否将这两个项目发布到同一个 Azure Web 站点上,以便请求: - /api/products/ => 返回 WebAPI 的 JSON - /products/ => 返回 MVC 网站的 HTML


我认为你需要创建两个独立的Azure网站。既然你可以创建一个混合了MVC控制器和API控制器的MVC项目,为什么还需要两个不同的项目呢? - Thiago Custodio
2个回答

30

前往Azure门户并创建一个Azure网站 -

输入图像描述

然后按以下设置在设置中设置额外的应用程序 -

输入图像描述

现在在Visual Studio解决方案中创建两个项目-> 1)MVC和2)WebApi

输入图像描述

下载上述创建的Azure网站的发布设置文件。将发布设置文件导入到Visual Studio MVC项目发布中,如下所示-

输入图像描述

对于WebApi项目,导入相同的发布设置,但是创建一个新路径为website/webapi

输入图像描述

发布这两个项目。

现在导航到http://{yoursite}.azurewebsites.net访问MVC网站。并导航到 http://{yoursite}.azurewebsites.net/webapi/api 访问您的WebApi。


@Nadav,我在免费模式下尝试了上面的示例,它可以正常工作。 - ramiramilu
2
我收到了以下信息:“由于发生内部服务器错误,无法显示页面。” - nadav
nadav,我得到了相同的错误。我怀疑是由于HTTP请求未正确路由到第二个项目。你发现这个问题还有其他信息吗? - diegosasw
我为我在这个答案中遇到的问题开了另一个问题。 http://stackoverflow.com/questions/34781561/run-two-different-asp-net-5-applications-under-the-same-azure-web-app - diegosasw
我该如何进入第二个网站(WebApi)的应用程序设置? - Marzouk
@Marzouk 你是否在寻找“虚拟应用程序和目录”?如果是的话,它在页面底部的“应用程序设置”下。 - Jaquio

0

基本上,需要完成以下步骤才能使其正常工作。

解决方案包含:

i)将sampleApp.API(.Net Core Web API)部署在子文件夹中

ii)sampleApp.UI(Angular应用程序)

为两个应用程序设置Azure门户

1)转到Azure门户中的Web应用程序 ->设置 ->配置

2)选择路径映射,在此处为子站点创建新的映射条目。添加此条目时,请不要选择目录复选框以保持其为虚拟应用程序类型。点击保存

 **Virtual Path:** /{folderName}            **physicalPath:**  /site/wwwroot/{folderName} 

3)现在,转到VS2017,右键单击您的API项目,然后单击发布

4)在发布设置窗口中,将路径设置为

site name : existing + "/{folderName} "
DestinationUrl : existing + "/{folderName} "

5) 现在使用 ng-build --prod 命令构建您的 Angular 应用程序,并部署 dist/clientApp 文件夹,使用根路径进行发布。

现在两者都应该正常工作。

angular app https://{AzureAppName}.azurewebsites.net

Web API https://{AzureAppName}.azurewebsites.net/{folderName}/api/{controllerName}/{action}

如果用户在访问API项目时仍然遇到“无法从web.config读取配置数据”的问题或者出现502错误代码,则需要进行以下操作:

在您的API项目中,转到startup.cs并更改configure函数以包含以下代码行:

app.Map('/{folderName}', app1 => Configure1(app1, loggerFactory);

并创建一个名为configure1的空白副本配置函数,并按照上述方法重新部署您的API项目。

public void Configure1(IApplicationBuilder app, ILoggerFactory loggerFactory)
        {
            //keep it blank
        }

它对我有用。如果还有人遇到相关问题,请随意讨论。 - Azure-Techno

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接