为什么每个Web API操作都需要用例如
进行修饰[AcceptVerbs("Get", "Post")]
专门接受Get和Post?有没有办法全局允许所有动作的所有动词而不依赖于方法名称的Get或Post Prefeix?
除了剩下的处理方式之外,为了将动词绑定到Actions,为什么不允许所有人在需要时限制它们?
答案 0 :(得分:2)
默认情况下不启用它的原因是它会破坏您的RESTful API。
如果您默认启用了所有谓词,则无法确定要使用的操作。
我们举个例子,你有UsersController
,其中包含4种方法:Get all users
,Get specific user
,Post user
和Delete user
。这些方法只会产生两个不同的端点,并且WebApi引擎能够选择需要HTTP动词的正确方法。
<强> UsersController 强>
[RoutePrefix("api/users")]
public class UsersApiController : ApiController
{
[Route("")]
public IHttpActionResult Get()
{
var result = _userRepository.GetAll();
return Ok(result);
}
[Route("{id:guid}")]
public IHttpActionResult Get(Guid id)
{
var result = _userRepository.GetById(id);
if (result == null)
return NotFound();
return Ok(result);
}
[Route("")]
public IHttpActionResult Post([FromBody]UserPostModel model)
{
var user = new User(model.FirstName, model.LastName);
_userRepository.Add(user);
return Created<User>(Request.RequestUri + user.Id.ToString(), user);
}
[Route("{id:guid}")]
public IHttpActionResult Delete(Guid id)
{
var result = _userRepository.Delete(id);
if (!result)
return BadRequest();
return Ok();
}
public class UserPostModel
{
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; }
}
}