c# - ASP.NET WebAPI 和 Razor 页面位于同一 Web 位置
问题描述
我开发了一个仅包含 WebApi 的项目,该项目通过 VS WebDeploy 部署在网络空间的根目录。有了新的要求,我还需要在同一个网络空间(Razor 页面)中托管一个网络应用程序。我决定在我的 Visual Studio 解决方案中将项目分开,并将 API 发布到{root}/webapi/
文件夹中,并将 Razor webapp发布到文件{root}
夹中。
我首先将 webapi 重新发布到新文件夹位置并进行测试 API 调用(将文件夹位置添加为 url 的一部分,因此http://example.com/webapi/route),但服务器返回了Server Error in '/' Application. Runtime Error
.
我想知道在将项目移动到子文件夹时是否需要更改其他一些参数,并且欢迎我尝试解决的问题的任何其他解决方案。
PS:我无权访问主机的 IIS 服务器设置
解决方案
我不是在 IIS 上托管 .NET Core 应用程序的专家,但如果不允许更改 IIS 服务器配置,则可能无法使此设置正常工作。我假设您需要将嵌套 API 项目添加为网站以使 IIS 实际运行它。
所以,看起来你需要某种多租户。由于您的问题是关于 Razor Pages,我认为我们在这里处理的是 ASP.NET Core 而不是经典的 ASP.NET(由您的标签建议)。
在 ASP.NET Core 中,使用应用程序分支设置多租户应用程序非常容易。在这种情况下,您的主 Razor Pages 项目的Startup.Configure方法将如下所示:
public void Configure(IApplicationBuilder app)
{
app.Map("/webapi", ConfigureWebApiBranch);
// configuration of your Razor Pages app pipeline...
app.UseMvc(...);
}
public void ConfigureWebApiBranch(IApplicationBuilder app)
{
// configuration of your Web Api app pipeline...
app.UseMvc(...);
}
当然,ConfigureWebApiBranch可以驻留在另一个程序集中,因此您可以使两个项目在逻辑上分开。
关于这个解决方案有一个问题。main 和 web api 分支共享在主项目的Startup.ConfigureServices中配置的相同 DI 容器。但这也可以在必要时修复。您可以在此处找到对此的详细说明。