将ASP.net MVC网站部署到Azure网站的子文件夹中?

7
我有一个asp.net mvc网站,希望通过GitHub部署到Azure上,并作为主域名的子文件夹访问。
例如:http://example.com/mymvcsite/ 理想情况下,我希望网站完全自包含在子文件夹中。就像配置为传统的IIS应用程序文件夹一样。也就是说,我不想为mydomain.com建立一个域mvc网站,只是碰巧在/mymvcsite/子文件夹路径下完成所有业务。
我很乐意在Azure上托管整个网站,对于这个特定的项目来说,它只需要位于子文件夹下。
今天我一直在苦苦挣扎和谷歌搜索,试图找出如何处理此事,但一无所获。

为什么不将其部署到根目录,并使用路由添加子文件夹路径呢? - amhed
@ahmed 好的,理想情况下我以后可能想要添加额外的应用程序子文件夹。但现在这样就足够了。您是建议我可以在我的Azure服务文件中添加路由吗? - Simon Needham
你可以在你的RouteConfig.cs中添加额外的路由(或者更好的方法是使用区域)。 - amhed
@ahmed 我选择使用Areas。这似乎是最接近我想要的,而不必在Azure中启动虚拟机并在IIS中设置应用程序文件夹。 - Simon Needham
1
我已将采纳的答案改为@Bigs。自从我在2013年2月提出这个问题以来,微软已经在Azure控制面板中提供了一种简单的方法来处理这个问题。不过无论如何,当时我还是采用了ahmed的建议。 - Simon Needham
3个回答

7
如果您使用Web发布方法,可以在网站名称中设置 mydomain/mymvcsite 而不是 mydomain。至少对于默认的Windows Azure网站 http://mydomain.azurewebsites.net/mymvcsite 对我来说起作用。
或者您可以使用FTP发布方法。

1
我尝试了这个,使用Web Deploy在第一次部署时它创建了/site/wwwroot/stats/(这正是我想要的),但在第二次尝试中,我最终得到了/site/wwwroot/wwwroot/stats/。 - htuomola
1
为了避免递归,请确保配置文件中的“SiteName”和“DestinationURL”指向同一个子文件夹。 - Paras Parmar

6

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读取配置数据”的问题,
请在您的API项目中打开startup.cs文件并更改configure函数,添加以下代码行:
app.Map('/{folderName}', app1 => Configure1(app1, loggerFactory);

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

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

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