C# 配置到子文件夹的api路由

C# 配置到子文件夹的api路由,c#,asp.net-mvc-4,asp.net-web-api,routes,C#,Asp.net Mvc 4,Asp.net Web Api,Routes,我正在使用MVC4开发一个webapi。 我对路由器有怀疑。 如何路由到“我的网站”下的子文件夹。例如: www.site.com/Service 我的WebApi应用程序位于服务文件夹中。我的主页工作正常,但找不到API 以下是默认情况下我的路线: config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}",

我正在使用MVC4开发一个webapi。 我对路由器有怀疑。 如何路由到“我的网站”下的子文件夹。例如:

www.site.com/Service

我的WebApi应用程序位于服务文件夹中。我的主页工作正常,但找不到API

以下是默认情况下我的路线:

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
我想打电话

www.site.com/Service/api/{controller}/{id}

有办法做到这一点吗

[编辑] 我将服务区域添加到Ares文件夹中,因为WebApi MVC 4模板中已经存在一个帮助页面区域。 在这个文件夹中,我添加了控制器

这是服务区课程

public class ServiceAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get
        {
            return "Service";
        }
    }

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Service_default",
            "Service/api/{controller}/{id}",
            new { id = UrlParameter.Optional }
        );
    }
}
我不知道这是否有帮助,我的网站www.site.com只是一个网站,我在iis上添加并转换了这个文件夹服务。
[/Edit]

您需要创建自己的
区域注册
,如下图所示,以使其正常工作

 public class ServiceAreaRegistration : AreaRegistration
    {
        public override string AreaName 
        {
            get{ return "Service";}
        }

        public override void RegisterArea(AreaRegistrationContext context)
        {
            context.Routes.MapHttpRoute(
                name: "ServiceDefaultApi",
                routeTemplate: "Service/api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }
您还需要确保在
Application\u Start()中有以下代码

更新: 您的文件夹结构应如下所示:


我应该添加哪个命名空间?您可以将
ServiceAreaRegistration
类放入
Global.asax
文件中。我在项目中添加了一个区域,并且我确信我在应用程序\u Start()中有该代码。但它不起作用=/确保您有一个文件夹调用
服务
,并且您的Web API控制器也在该文件夹内。为什么要从使用AreaRegistration with Web API开始?区域是一个MVC概念。
AreaRegistration.RegisterAllAreas();