当部署到IIS 7.5上的子目录时,C#Web API 2应用程序在GET方法上生成404

本文关键字:应用程序 API GET 方法 C#Web IIS 部署 子目录 | 更新日期: 2023-09-27 18:29:33

我遇到了一个让我发疯的问题。

我有一个基本的web api,它是用.net 4.5上的C#/web api 2编写的。只要我将站点部署到IIS 7.5的根目录,它就可以正常工作——只要我将其部署到子目录,任何方法请求都会出现404个错误。

我的设置是:

我有一个名为ServicesController的控制器,具有以下方法:

    public IEnumerable<Service> GetAllServices()
    {
        return Services;
    }
    public IHttpActionResult GetService(int id)
    {
        var Service = Services.FirstOrDefault((p) => p.Id == id);
        if (Service == null)
        {
            return NotFound();
        }
        return Ok(Service);
    }
}

}

我有一个这样的路由模板集:

config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }

如果我在fiddler中检查请求,在根目录(根目录为localhost或wwwroot)上,请求看起来是正确的:

api/services/1(例如)

在子目录(称为ServicesApp)中,请求预先准备了目录名,我认为这可能是问题所在(或不是问题所在),如下所示:

服务App/api/services/1

我的visual studio项目设置中是否需要更改某些内容来修改基本调用,或者可能是其他内容?我有点像一个webapi 2的新手,所以我确信我缺少一些小东西。

根据我在这里读到的其他帖子,我尝试了其他事情:

-iis集成模式在我的web.config 中启用

-我确实尝试在web.config和中添加runAllManagedModulesForAllRequests选项

我可以在IIS中创建一个子应用程序,并将子目录定义为根目录,它会正常工作,但这不是一个可行的选项,因为它将部署到不允许该级别功能的远程/共享windows主机。

非常感谢您的帮助。如果我在搜索时错过了一个明显的答案,请提前道歉。

当部署到IIS 7.5上的子目录时,C#Web API 2应用程序在GET方法上生成404

将应用程序移动到子文件夹后,根目录中是否有其他应用程序?web.config文件从父应用程序继承设置,因此,如果您的父应用程序正在定义一个设置,而您放置了一个定义相同设置的子应用程序,则可能会出现错误(取决于哪个设置)。

同样在IIS中,您是否右键单击子应用程序并选择"转换为应用程序"?每个应用程序和"子"应用程序都需要在IIS中使用"添加应用程序"或"转换为应用程序"进行设置。

也许你需要与远程/共享windows主机的所有者交谈,了解如何通过他们来做到这一点。他们可能需要对每个应用程序进行另一次订阅。

此外,当您在IIS中选择webapi应用程序文件夹,然后单击"浏览"时,会显示什么路径?它应该会打开一个浏览器,其中有指向应用程序根目录的正确路径。