2016-05-04 31 views
-3

this articleの手順に従って、ASP.NET MVC 5を使用してRESTful Web APIサービスを構築しました。プロセスの一環として、私は、コントローラの設定:快適なWeb​​サービスリポジトリが適切にルーティングされない

[Route("api/[controller]")] 
public class AccountController : Controller 
{ 
    [FromServices] 
    public IAccountRepository Repository { get; set; } 

    [HttpGet(Name = "GetAll")] 
    public IEnumerable<UserAccount> GetAll() { 
     return Repository.GetAll(); 
    } 

    [HttpGet("(id)", Name = "GetUserAccount")] 
    public IActionResult GetUserAccount(int id) { 
     var account = Repository.GetUserAccount(id); 
     if (account == null) 
      return HttpNotFound(); 
     return new ObjectResult(account); 
    } 

    [HttpPost("(item)", Name = "AddUserAccount")] 
    public IActionResult Add([FromBody] UserAccount item) { 
     if (item == null) 
      return HttpBadRequest(); 
     return CreatedAtRoute("GetUserAccount", new { controller = "Account", id = item.Id }, item); 
    } 

    [HttpDelete("(id)", Name = "RemoveUserAccount")] 
    public void Remove(int id) { 
     Repository.Remove(id); 
    } 

    [HttpPost("(id)", Name = "UpdateUserAccount")] 
    public IActionResult Update([FromBody] UserAccount item) { 
     if (item == null) 
      return HttpBadRequest(); 

     if (!Repository.Update(item)) 
      return HttpNotFound(); 

     return new NoContentResult(); 
    } 
} 

私はURL http://localhost:2733/api/accountを使用してブラウザからこのサービスにアクセスすると、 `GETALLアクションがOKである、実行されますが、私がアクセスしようとすると、それは使用してURL http://localhost:2733/api/account/getall、私は404エラーを取得します。

どうしたのですか?

+0

デフォルトルートが実行されるようです。 routes.MapMvcAttributeRoutes();を呼び出していますか?あなたのブーストラッピングコードには何か? –

+0

プロジェクト内のどこでも見つかりません –

+0

デフォルトのルート定義の前に追加してみてください。リンクをチェックしてください:https://blogs.msdn.microsoft.com/webdev/2013/10/17/attribute-routing-in-asp-net-mvc-5/ –

答えて

0

コントローラのメソッドを変更して、デフォルトの値コントローラのシグネチャと一致するようにして、これを動作させました。コントローラクラスは今のようになります。

[Route("api/[controller]")] 
public class AccountController : Controller 
{ 
    [FromServices] 
    public IAccountRepository Repository { get; set; } 

    [HttpGet] 
    public IEnumerable<UserAccount> Get() { 
     return Repository.GetAll(); 
    } 

    [HttpGet("{id}")] 
    public IActionResult Get(int id) { 
     var account = Repository.GetUserAccount(id); 
     if (account == null) 
      return HttpNotFound(); 
     return new ObjectResult(account); 
    } 

    [HttpPost] 
    public IActionResult Post([FromBody] UserAccount item) { 
     if (item == null) 
      return HttpBadRequest(); 
     var account = Repository.Add(item); 
     return new ObjectResult(account); 
    } 

    [HttpDelete("{id}")] 
    public void Delete(int id) { 
     Repository.Remove(id); 
    } 

    [HttpPut("{id}")] 
    public IActionResult Put(int id, [FromBody] UserAccount item) { 
     if (item == null) 
      return HttpBadRequest(); 

     if (!Repository.Update(item)) 
      return HttpNotFound(); 

     return new ObjectResult(item); 
    } 
} 

私が学んだ他の事は、MVCルーティングを設定するために、Startup.csでStartupクラスがConfigureServicesメソッドに次の行を必要とすることである。

services.AddMvc(); 

またConfigure方法では、この行が必要です。これらの変更により

app.UseMvc(); 

、コントローラの動作とルート適切な方法への要求。

関連する問題