1

我有擔任了活動的控制器。所述控制器提供路徑GET => /Events將返回活動的陣列。的WebAPI多重矛盾的途徑 - 驗證的基於

該控制器可以用於活動到3種不同類型的認證。 AdminApiUser

如果請求者被認證爲User我想回到事件對象,但範圍的用戶。例如

class Event { 
public string Title { get; set; } 
} 

class EventView { 
    public string Title { get; set; } 
    public bool RSVPed { get; set; } 
} 

我怎樣才能使這成爲可能在我的控制器 -

[RoutePrefix("Events")] 
class EventsController { 

    [@Authorize(AuthenticationType.Admin, AuthenticationType.Api)] 
    [HttpGet] 
    [Route("")] 
    public async Task<IHttpActionResult> Get() { } 

    [@Authorize(AuthenticationType.User)] 
    [HttpGet] 
    [Route("")] 
    public async Task<IHttpActionResult> Get() { } 
} 
+1

有所有允許的權限一個動作。在您根據授權委託人執行期望行爲的行爲中。除此之外,你必須使路線獨一無二,以免彼此衝突。 – Nkosi

+0

我想這將是一個問題。我希望路由器能有人處理它,但沒關係。 –

回答

0

與所有允許的權限一個動作。在您根據授權委託人執行期望行爲的行爲中。

[RoutePrefix("Events")] 
public class EventsController : ApiController { 

    [Authorize(AuthenticationType.Admin, AuthenticationType.Api, AuthenticationType.User)] 
    [HttpGet] 
    [Route("")] //Matches GET => /Events 
    public async Task<IHttpActionResult> Get() { 
     var user = User.Identity; 
     if(user.AuthenticationType == AuthenticationType.User) { 
      //...User specific code 
     } else { 
      //...Admin, API specific code 
     } 
    } 

} 

其他明智的你必須使路線獨特,以免互相沖突。

[RoutePrefix("Events")] 
public class EventsController : ApiController { 

    [Authorize(AuthenticationType.Admin, AuthenticationType.Api)] 
    [HttpGet] 
    [Route("")] //Matches GET => /Events 
    public async Task<IHttpActionResult> Get() { 
     //... 
    } 

    [Authorize(AuthenticationType.User)] 
    [HttpGet] 
    [Route("{id:int}")] //Matches GET => /Events/12345 
    public async Task<IHttpActionResult> Get(int id) { 
     //... 
    } 
}