首页 > 解决方案 > 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 服务器设置

标签: c#asp.netiisasp.net-web-api

解决方案


我不是在 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 容器。但这也可以在必要时修复。您可以在此处找到对此的详细说明。


推荐阅读