【问题标题】:ASP.NET WebAPI and Razor Pages in the same web locationASP.NET WebAPI 和 Razor 页面位于同一 Web 位置
【发布时间】:2018-08-20 10:11:18
【问题描述】:

我开发了一个仅包含 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.net iis asp.net-web-api


    【解决方案1】:

    我不是在 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 可以驻留在另一个程序集中,这样您就可以使两个项目在逻辑上分开。

    关于这个解决方案有一个问题。 main 和 web api 分支共享在主项目的 Startup.ConfigureServices 中配置的相同 DI 容器。但这也可以在必要时修复。您可以找到对此的详细解释,例如here.

    【讨论】:

    • 谢谢@Adam Simon,从你写第一句话的方式来看,如果我坚持使用.NET(使用MVC而不是Razor),这样做似乎是可行的,对吗?或者反过来将当前 API 移动到 ASP.NET Core
    • 如果你想采用我描述的多租户解决方案,你显然不能混淆平台。这两个项目都必须在经典 ASP.NET 或 ASP.NET Core 上运行。我的回答侧重于后者,但也可以在经典 ASP.NET 中的单个应用程序中同时使用 MVC 和 WebApi。
    猜你喜欢
    • 2019-10-11
    • 2013-05-16
    • 1970-01-01
    • 2018-03-18
    • 1970-01-01
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    • 2021-02-24
    相关资源
    最近更新 更多