버전
(aspnetwebstack에서) 시험판 버전에 대한 모든 패키지 WebApi 및 하나로, OData를 업그레이드 $select
및 $expand
등의 기능을 사용합니다.사용 중 하나로, OData 작업
Microsoft.AspNet.WebApi ->5.0.0-beta1-130514
Microsoft.AspNet.WebApi.Client ->5.0.0-beta1-130514
Microsoft.AspNet.WebApi. 코어 ->5.0.0-beta1-130514
Microsoft.AspNet.WebApi.OData ->5.0.0-beta1-130514
Microsoft.AspNet.WebApi.Web ... ->5.0.0 -β1-130514
컨트롤러
나는 기본 내 API의 controlers에 대한 클래스가 있습니다public class baseApiController<T> : EntitySetController<T, int>
where T: class, IEntity, new()
{
public IRepository Repositorio { get; private set; }
public baseApiController(IRepository repositorio)
{
Repositorio = repositorio;
}
[Queryable(AllowedQueryOptions = AllowedQueryOptions.All, PageSize=20)]
public override IQueryable<T> Get()
{
return Repositorio.Query<T>();
}
[Queryable(AllowedQueryOptions = AllowedQueryOptions.All)]
protected override T GetEntityByKey(int key)
{
return Repositorio.Get<T>(key);
}
}
그리고 사용자 컨트롤러
[Authorize]
public class usuariosController : baseApiController<Usuario>
{
public usuariosController(IRepository repositorio)
: base(repositorio)
{ }
[Authorize(Roles="Admin,TI")]
public HttpResponseMessage post(Usuario usuario)
{
var x = WebSecurity.CreateUserAndAccount(usuario.Email, "maisbb", new { Nome = usuario.Nome }); //TODO: Não fixar senha
Repositorio.Store(usuario);
return Request.CreateResponse(HttpStatusCode.OK, usuario);
}
[HttpGet, Queryable(AllowedQueryOptions = AllowedQueryOptions.All)]
public IQueryable roles([FromODataUri] int key)
{
var usuario = (from u in Repositorio.Query<Usuario>()
where u.Id == key
select new { u.Email }).SingleOrDefault();
return Roles.GetRolesForUser(usuario.Email).AsQueryable();
}
}
목표
액션을이 URL과 사용자의 모든 역할을 검색 에
목표는 다음과 같습니다 : 나는 나의 API WebApiConfig
을 구성 /api/usuarios(67)/roles
은 다음과 같습니다 :특정 사용자에 대한 모든 역할을 검색
modelBuilder.EntitySet<Usuario>("usuarios");
var entityTypeUsuario = modelBuilder.Entity<Usuario>();
var actRoles = entityTypeUsuario.Action("roles");
actRoles.Parameter<int>("key");
actRoles.Returns<string[]>();
...
var model = modelBuilder.GetEdmModel();
config.Routes.MapODataRoute(routeName: "OData", routePrefix: "api", model: model);
config.EnableQuerySupport();
var jsonFormatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
var enumConverter = new StringEnumConverter();
jsonFormatter.SerializerSettings.Converters.Add(enumConverter);
config.Formatters.Remove(config.Formatters.XmlFormatter);
var jqueryFormatter = config.Formatters.FirstOrDefault(x => x.GetType() == typeof(JQueryMvcFormUrlEncodedFormatter));
config.Formatters.Remove(config.Formatters.XmlFormatter);
config.Formatters.Remove(config.Formatters.FormUrlEncodedFormatter);
config.Formatters.Remove(jqueryFormatter);
config.Formatters.JsonFormatter.SerializerSettings.DateFormatHandling = DateFormatHandling.IsoDateFormat;
오류
GET : /api/usuarios(67)/role
"이 서비스는 '~/entityset/key/action'형식의 OData 요청을 지원하지 않습니다."
어떤 클라이언트 도구를 사용하면 테스트를 위해 사용하는 : 당신은 또한 하나로, OData 조치에 대해 마이크에서이 좋은 포스트에서 볼 수 있습니까? –
@ JasonSteele [Postman on Chrome Webstore] (https://chrome.google. – ridermansb