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

Fro*_*dUp 5 .net c# asp.net iis asp.net-web-api

我有一个让我发疯的问题。

我在.net 4.5上使用C#/ Web API 2编写了基本的Web api。只要将站点部署到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);
    }

}
Run Code Online (Sandbox Code Playgroud)

}

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

config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
Run Code Online (Sandbox Code Playgroud)

如果我在处理提琴手时检查请求,则在根目录(根目录为localhost或wwwroot)上,请求看起来正确:

api / services / 1(例如)

在子目录(称为ServicesApp)中,请求会在目录名前加上(我认为?)可能是问题(或不是问题),例如:

ServicesApp / api / services / 1

我需要在Visual Studio项目设置中进行某些更改以修改基本调用,还是其他?我是Web api 2的新手,所以我确定它是我所缺少的小东西。

根据我在这里阅读的其他帖子,我尝试过的其他内容:

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

-i确实也尝试在web.config中添加runAllManagedModulesForAllRequests选项

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

任何帮助,不胜感激。如果我在搜索时错过了一个明显的答案,请提前道歉。

Mat*_*der 2

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

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

也许您需要与远程/共享 Windows 主机的所有者交谈,以了解如何通过他们来执行此操作。他们可能需要为每个应用程序重新订阅。

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