同一网站中的ASP.NET WebAPI和Razor页面

时间:2018-08-20 10:11:18

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

我已经开发了一个仅由WebApi组成的项目,该项目是通过VS WebDeploy在Webspace的根部进行部署的。 有了新的要求,我还需要在同一个Web空间(Razor页面)中托管一个Web应用程序。 我决定在Visual Studio解决方案中将项目分开,然后将API发布到{root}/webapi/文件夹中,将Razor Webapp发布到{root}文件夹中。

我首先将webapi重新发布到新的文件夹位置并进行了测试API调用(将文件夹位置添加为url的一部分,因此添加了http:/example.com/ webapi / route) ,但服务器返回了Server Error in '/' Application. Runtime Error

我想知道在将项目移至子文件夹时是否需要更改其他参数,欢迎使用其他任何解决方案来解决我要解决的问题。

PS:我无权访问主机的IIS服务器设置

1 个答案:

答案 0 :(得分:2)

我不是在IIS上托管.NET Core应用程序的专家,但是如果您不允许更改IIS服务器配置,则很有可能无法使此安装程序起作用。我假设您需要将嵌套的API项目添加为网站,以使IIS实际运行它。

因此,看来您需要某种多租户。由于您的问题是关于Razor Pages的,所以我想我们在这里使用的是ASP.NET Core,而不是经典的ASP.NET(由您的标签建议)。

在ASP.NET Core中,使用application branches设置多租户应用程序非常容易。在这种情况下,主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 可以驻留在另一个程序集中,因此您可以使两个项目在逻辑上分开。

关于此解决方案有一个陷阱。主分支和Web api分支都共享在主项目的 Startup.ConfigureServices 中配置的同一个DI容器。但是,如有必要,也可以解决此问题。您可以找到对此的详细说明,例如here