このURLを実行すると、/api/users/1
は、HttpDelete-Attributeを使用すると、削除アクションにのみマッピングされます。この行動の理由は何ですか?エルス要求されたリソースがHTTPメソッドをサポートしていませんGET
私は彼のメッセージが表示されます:要求されたリソースは、HTTPメソッドをサポートしていません
[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");
}
}
は、これらは私のルートですGET:規約により
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()があるため、「簡潔さのために削除されました」というコメントが表示されるので、これはあなたが話す理由にはなりません。私は完全なコード(Getメソッド)で私の質問を更新しました – Elisabeth
しかし、パラメータを受け入れるGETアクションがありません。あなたのURL/api/users/1に基づいて、引数として1を渡そうとしていますが、それを受け入れるGETアクションはありません。ルーティングは 'public HttpResponseMessage Get(int id)'のようなアクションを探しています –
私はapi/users/1でフィドラーを使用し、http動詞をDELETEに設定すると動作します。しかし、ブラウザのURLでapi/users/1をトリガーすると、Get(int id)がトリガーされます(あなたが言ったように)。これは、ブラウザで発生するすべてのURLがデフォルトでGETリクエストであることを意味しますか? – Elisabeth