Asp.net web api 如何为API创建MVC区域?

Asp.net web api 如何为API创建MVC区域?,asp.net-web-api,controller,asp.net-mvc-5,asp.net-mvc-areas,Asp.net Web Api,Controller,Asp.net Mvc 5,Asp.net Mvc Areas,我创建了一个新的MVC项目,并勾选了API框 然而,我打算创建许多API函数,我并不想填充主控制器文件夹,因此,我认为这将是一个很好的应用领域 因此,我创建了一个名为API的区域,但是,无论我做什么,我似乎都无法访问任何API页面 为了进行测试,我在API区域创建了另一个名为test的控制器,我可以访问并按预期执行所有操作 我直接从MVC2/3过来,然后休息了几年。。。我有点失去联系,我相信这可能与/App\u Start/WebApiConfig.cs和/Global.asax文件有关,但是,

我创建了一个新的MVC项目,并勾选了API框

然而,我打算创建许多API函数,我并不想填充主控制器文件夹,因此,我认为这将是一个很好的应用领域

因此,我创建了一个名为
API
的区域,但是,无论我做什么,我似乎都无法访问任何API页面

为了进行测试,我在API区域创建了另一个名为
test
的控制器,我可以访问并按预期执行所有操作

我直接从MVC2/3过来,然后休息了几年。。。我有点失去联系,我相信这可能与
/App\u Start/WebApiConfig.cs
/Global.asax
文件有关,但是,我尝试过以各种方式编辑它们,但没有任何运气


有人知道发生了什么事吗?我需要做什么才能让API功能在某个区域工作?

您不需要为API控制器创建一个区域,但您的API控制器必须从
ApiController
派生才能拾取。不要创建区域,只需在文件夹中组织控制器,只要控制器遵循约定,WebApi就会拾取它们

WebApiConfig.cs
中,您可以定义路由,但我建议改用。然后,对于每个“区域”,您可以创建一个基本api控制器,并在类上粘贴一个“[RoutePrefix(“api/areaName”)]属性,然后对于该区域中的每个控制器,您只需从该基本控制器派生

下面是一个“用户”api控制器的快速示例。通过以下示例,您将能够使用以下URL:

  • GET
  • GET
  • POST
记住在
WebApiConfig
类中启用基于属性的路由

WebApiConfig.cs

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes();
    }
}
[RoutePrefix("api/users")]
public class UsersApiController : ApiController 
{
        List<User> _users = new List<User> { new User("Foo", "Bar"), new User("Bar", "Foo") };

        [Route("")]
        public IHttpActionResult Get()
        {
            var result = _users;

            return Ok(result);
        }

        [Route("{id:guid}")]
        public IHttpActionResult Get(Guid id)
        {
            var result = _users.FirstOrDefault(q => q.Id == id);

            if (result == null)
                return NotFound();

            return Ok(result);
        }        

        [Route("")]
        public IHttpActionResult Post([FromBody]PostModel model)
        {
            // Process the input model
            var user = new User(model.FirstName, model.LastName);

            // Save user to database
            _users.Add(user);           

            return Created<User>(Request.RequestUri + user.Id.ToString(), user);
        }

        public class PostModel 
        {
            public string FirstName { get; set; }
            public string LastName { get; set; }
        }

        public class User
        {
            public User(string firstName, string LastName)
            {
                Id = Guid.NewGuid();
                FirstName = firstName;
                LastName = lastName;
            }

            public Guid Id { get; private set; }
            public string FirstName { get; private set; }
            public string LastName { get; private set; }        
        }
}
UsersApiController.cs

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes();
    }
}
[RoutePrefix("api/users")]
public class UsersApiController : ApiController 
{
        List<User> _users = new List<User> { new User("Foo", "Bar"), new User("Bar", "Foo") };

        [Route("")]
        public IHttpActionResult Get()
        {
            var result = _users;

            return Ok(result);
        }

        [Route("{id:guid}")]
        public IHttpActionResult Get(Guid id)
        {
            var result = _users.FirstOrDefault(q => q.Id == id);

            if (result == null)
                return NotFound();

            return Ok(result);
        }        

        [Route("")]
        public IHttpActionResult Post([FromBody]PostModel model)
        {
            // Process the input model
            var user = new User(model.FirstName, model.LastName);

            // Save user to database
            _users.Add(user);           

            return Created<User>(Request.RequestUri + user.Id.ToString(), user);
        }

        public class PostModel 
        {
            public string FirstName { get; set; }
            public string LastName { get; set; }
        }

        public class User
        {
            public User(string firstName, string LastName)
            {
                Id = Guid.NewGuid();
                FirstName = firstName;
                LastName = lastName;
            }

            public Guid Id { get; private set; }
            public string FirstName { get; private set; }
            public string LastName { get; private set; }        
        }
}
[RoutePrefix(“api/用户”)]
公共类UsersApiController:ApiController
{
列表_用户=新列表{新用户(“Foo”、“Bar”)、新用户(“Bar”、“Foo”)};
[路线(“”)
public IHttpActionResult Get()
{
var结果=_用户;
返回Ok(结果);
}
[路由(“{id:guid}”)]
公共IHttpActionResult获取(Guid id)
{
var result=\u users.FirstOrDefault(q=>q.Id==Id);
如果(结果==null)
返回NotFound();
返回Ok(结果);
}        
[路线(“”)
公共IHttpActionResult Post([FromBody]PostModel模型)
{
//处理输入模型
var user=新用户(model.FirstName,model.LastName);
//将用户保存到数据库
_用户。添加(用户);
创建的返回(Request.RequestUri+user.Id.ToString(),user);
}
公共类后模型
{
公共字符串名{get;set;}
公共字符串LastName{get;set;}
}
公共类用户
{
公共用户(字符串名、字符串名)
{
Id=Guid.NewGuid();
名字=名字;
LastName=LastName;
}
公共Guid Id{get;private set;}
公共字符串名{get;private set;}
公共字符串LastName{get;private set;}
}
}