gpt4 book ai didi

c# - WebAPI 多个冲突路由 - 基于身份验证

转载 作者:太空宇宙 更新时间:2023-11-03 15:01:24 39 4
gpt4 key购买 nike

我有一个提供事件服务的 Controller 。 Controller 提供路由 GET =>/Events,它将返回一个事件数组。

此 Controller 可以为 3 种不同类型的身份验证提供事件服务。 AdminApiUser

如果请求者被认证为 User 我想返回 Event 对象,但范围仅限于用户。例如

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

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

我怎样才能在我的 Controller 中实现这一点-

[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() { }
}

最佳答案

使用所有允许的权限执行一项操作。在您根据授权主体执行所需行为的操作中。

[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) {
//...
}
}

关于c# - WebAPI 多个冲突路由 - 基于身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46015191/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com