Asp.net mvc 4 Web API帮助页复制所有区域的操作

Asp.net mvc 4 Web API帮助页复制所有区域的操作,asp.net-mvc-4,asp.net-mvc-routing,asp.net-web-api2,asp.net-web-api-helppages,Asp.net Mvc 4,Asp.net Mvc Routing,Asp.net Web Api2,Asp.net Web Api Helppages,我正在使用WebAPI2,它似乎已经启动了我现有的API调用,只是它复制了我拥有的每个区域的所有调用。例如,假设我有3个区域,其中一个区域中有一个API调用,如下所示: public IList<string> GetStringList(string id) { //do work here... return new List<string>{"a","b","c"}; } 虽然不是问题的解决方案,但可以使用属性来映射

我正在使用WebAPI2,它似乎已经启动了我现有的API调用,只是它复制了我拥有的每个区域的所有调用。例如,假设我有3个区域,其中一个区域中有一个API调用,如下所示:

public IList<string> GetStringList(string id)
    {
        //do work here...
        return new List<string>{"a","b","c"};
    }

虽然不是问题的解决方案,但可以使用属性来映射操作的路径,作为临时解决方法

要启用路由属性,请添加config.maphttpAttribute路由()到WebApiConfig中的注册,该注册应位于App_Start文件夹中

public static void Register(HttpConfiguration config)
{
    // Attribute routing.
    config.MapHttpAttributeRoutes();

    // Convention-based routing.
    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );
}
启用属性路由后,可以通过操作指定路由:

public class BooksController : ApiController
{
    [Route("api/books")]
    public IEnumerable<Book> GetBooks() { ... }
}
公共类控制器:ApiController
{
[路线(“api/books”)]
公共IEnumerable GetBooks(){…}
}
您可以查看路由前缀(如上所示),并确保使用页面开头所示的属性启用路由

编辑:

就你而言:

[Route("area2/api/MyAPIController/GetStringList/{id}")]
public IList<string> GetStringList(string id)
{
    //do work here...
    return new List<string>{"a","b","c"};
}
[路由(“area2/api/MyAPIController/GetStringList/{id}”)]
公共IList GetStringList(字符串id)
{
//在这里工作。。。
返回新列表{“a”、“b”、“c”};
}

认为问题可能与此有关,但不幸的是,这并没有解决问题。我看到了同样的问题。。。你能弄明白吗?不,还没有答案。我很抱歉,但我真的不知道你为什么会提出这个建议。这并没有减少上述重复呼叫的数量,这是我唯一的问题。我不确定你的建议还能解决什么问题。此外,无论如何,我都不是属性路由的超级粉丝:我也不喜欢属性路由,但它确实消除了我从多个区域收到的重复呼叫。我不认为我的答案是解决你的问题,只是一个工作。
[Route("area2/api/MyAPIController/GetStringList/{id}")]
public IList<string> GetStringList(string id)
{
    //do work here...
    return new List<string>{"a","b","c"};
}