当我运行此URL:/api/users/1
它只在使用HttpDelete-Attribute时映射到Delete操作。这种行为的原因是什么?请求的资源不支持HTTP方法GET
否则我收到他的消息:所请求的资源不支持HTTP GET方法
[RoutePrefix("api/users")]
public class UserController : ApiController
{
private readonly IUserService _userService;
public UserController(IUserService userService)
{
_userService = userService;
}
[Route("")]
public HttpResponseMessage Get()
{
return Request.CreateResponse<IEnumerable<UserDTO>>(HttpStatusCode.OK, _userService.GetUsers());
}
[Route("{id:int}")]
[HttpDelete]
public HttpResponseMessage Delete(int id)
{
_userService.Delete(id);
return Request.CreateResponse(HttpStatusCode.OK, "User was deleted successfully");
}
}
这是我的路线:
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { controller = "Home", action = "Start", id = RouteParameter.Optional }
);
你看到“为简洁起见”评论有我的公共HttpResponseMessage Get()所以这不能成为你说的原因。我用完整的代码更新了我的问题(获取方法) – Elisabeth
但您错过了接受参数的GET操作。根据你的URL/api/users/1,你希望传入1作为参数,但是你没有一个接受GET的动作。路由正在寻找像'public HttpResponseMessage Get(int id)' –
这样的动作当我使用带/ api/users/1的fiddler并将http动词设置为DELETE时,它就起作用。但是当我触发浏览器url中的api/users/1时,它想要触发Get(int id)(如你所说)。这是否意味着默认情况下浏览器中的每个网址触发都是GET请求? – Elisabeth