public IActionResult Get(int id) { var sportsbuilding = repository.SportsBuilding.SingleOrDefault(p => p.SportsBuildingID == id); //sportsbuilding.SportsHallList = null; List <SportsHall> sportshall = repository.SportsHallOnly.Where(p => p.SportsBuilding == sportsbuilding).ToList(); if (sportsbuilding == null) { return(NotFound()); } var buildingModel = new { id, sportsbuilding.Name, sportsbuilding.Street, sportsbuilding.HouseNumber, sportsbuilding.PostalCode, }; var response = new HALResponse(buildingModel) .AddLinks(new Link[] { new Link("self", "/api/SportsBuildings/{id}"), }).AddEmbeddedCollection("sportshallsLinks", sportshall, new Link[] { new Link("self", "/api/SportsHalls/{SportsHallID}") }); return(this.Ok(response)); }
public IEnumerable <KeyValuePair <string, IEnumerable <HALResponse> > > GetEmbeddedCollections(object model, IHALModelConfig config) { var type = model.GetType(); var embeddedModelProperties = type.GetTypeInfo().GetProperties().Where(x => x.IsDefined(typeof(HalEmbeddedAttribute))); foreach (var propertyInfo in embeddedModelProperties) { var embeddAttribute = propertyInfo.GetCustomAttribute(typeof(HalEmbeddedAttribute)) as HalEmbeddedAttribute; if (embeddAttribute == null) { continue; } var modelValue = propertyInfo.GetValue(model); var embeddedItems = modelValue as IEnumerable <object> ?? new List <object> { modelValue }; var halResponses = embeddedItems.Select(embeddedModel => { var response = new HALResponse(embeddedModel, config); response.AddLinks(this.GetLinks(embeddedModel)); response.AddEmbeddedCollections(this.GetEmbeddedCollections(embeddedModel, config)); return(response); }); yield return(new KeyValuePair <string, IEnumerable <HALResponse> >(embeddAttribute.CollectionName, halResponses)); } }
public IActionResult Put(int id, [FromBody] EventPostPut e) { if (e == null) { return(BadRequest()); } if (id == 0) { return(NotFound()); } var ev = new Event { EventId = id, Archived = e.Archived, Name = e.Name, PeopleAmount = e.PeopleAmount }; var sportIds = e.SportIds.ToList(); _eventAccess.UpdateEvent(ev, sportIds); var response = new HALResponse(new EventResource(_eventAccess.GetEvent(id))) .AddLinks(new Link("update", "/api/Event/" + id + "", null, "PUT")) .AddLinks(new Link("delete", "/api/Event/" + id + "", null, "DELETE")); return(Ok(response)); }
//public static HALResponse AddSelfLinkIfNotExists(this HALResponse response, HttpRequest request) { // if(!response.HasSelfLink()) { // response.AddSelfLink(request); // } // return response; //} public static HALResponse AddSelfLink(this HALResponse response, HttpRequest request) { var selfLink = new Link(Link.RelForSelf, request.Path, method: request.Method); response.AddLinks(selfLink); return(response); }
public IActionResult GetBar(int fooId) { // A collection of bars related to foo var bars = new List <object> { new { id = 1, fooId = fooId, type = "bar" }, new { id = 2, fooId = fooId, type = "bar" } }; // data about the bars related to foo var fooBarModel = new { fooId = fooId, count = bars.Count }; // Return a fooBar resource with embedded bars var response = new HALResponse(fooBarModel) .AddLinks(new Link[] { new Link("self", "/api/foo/{fooId}/bar") }) .AddEmbeddedCollection("bars", bars, new Link[] { new Link("self", "/api/bar/{id}") }); return(this.Ok(response)); }
public static IActionResult ToActionResult(this HALResponse model, Controller controller, HttpStatusCode statusCode = HttpStatusCode.OK) { return(new ObjectResult(model) { StatusCode = (int)statusCode }); }
public async Task <IActionResult> Exchange([FromBody] ExchangeRequest request) { _logger.LogInformation( $"Omregn beløbet {request.Amount} med fra valuta \"{request.FromCurrencyCode}\" til valuta \"{request.ToCurrencyCode}\""); if (!ModelState.IsValid) { return(BadRequest()); } var result = await _exchangeService.Exchange(request.Amount, request.FromCurrencyCode, request.ToCurrencyCode); var responseConfig = new HALModelConfig { LinkBase = $"{Request.Scheme}://{Request.Host.ToString()}", ForceHAL = Request.ContentType == "application/hal+json" }; var response = new HALResponse(responseConfig); response.AddEmbeddedResource("result", result); response.AddLinks( new Link("self", "/api/Exchange", null, "POST"), new Link("fromCurrency", $"/api/CurrencyRates/{request.FromCurrencyCode}"), new Link("toCurrency", $"/api/CurrencyRates/{request.ToCurrencyCode}") ); return(this.HAL(response)); }
public async Task <IActionResult> GetRegistration([Required] int id) { _logger.LogInformation($"Vis detaljer for registrering {id}"); var data = await _registrationService.GetByIdAsync(id); var result = new RegistrationsModel { Id = data.Id, Date = data.Date, StartTime = data.StartTime, EndTime = data.EndTime.GetValueOrDefault() }; var responseConfig = new HALModelConfig { LinkBase = $"{Request.Scheme}://{Request.Host.ToString()}", ForceHAL = Request.ContentType == "application/hal+json" }; var response = new HALResponse(responseConfig); response.AddEmbeddedResource("registration", result); response.AddLinks( new Link("self", $"/api/registration/{id}", null, "GET") ); return(this.HAL(response)); }
public IHttpActionResult GetBar(int fooId) { // A collection of bars related to foo var bars = new List <object> { new { id = 1, fooId = fooId, type = "bar" }, new { id = 2, fooId = fooId, type = "bar" } }; // data about the bars related to foo var fooBarModel = new { fooId = fooId, count = bars.Count }; // Return a fooBar resource with embedded bars var response = new HALResponse(fooBarModel) .AddSelfLink(this.Request) .AddLinks(new Link[] { new Link("other", "/api/foo/{fooId}/bar", replaceParameters: false) }) .AddEmbeddedResource("baz", new { name = "bazza" }, new Link[] { new Link("a", "test") }) .AddEmbeddedCollection("bars", bars, new Link[] { new Link("self", "/api/bar/{id}") }); return(this.Ok(response)); }
private async Task AssertModelJson(object model, string contentType, bool forceHal, string expected) { using (var stream = new MemoryStream()) { var content = new StringContent(""); content.Headers.ContentType = new MediaTypeHeaderValue(contentType); var formatter = new JsonHALMediaTypeFormatter(); var link = new Link("self", "href"); var embedded = new[] { new { bar = true } }; var halModel = new HALResponse(model, new HALModelConfig { ForceHAL = forceHal }) .AddLinks(link) .AddEmbeddedCollection("bars", embedded); Assert.NotNull(formatter); await formatter.WriteToStreamAsync(typeof(HALResponse), halModel, stream, content, null); // Reset the position to ensure it can read stream.Position = 0; var reader = new StreamReader(stream); string result = await reader.ReadToEndAsync(); Assert.Equal(expected, result); } }
public async Task <IActionResult> GetRegistrations() { _logger.LogInformation("Vis registreringer"); var email = HttpContext.User.Claims.FirstOrDefault(c => c.Type.EndsWith("emailaddress"))?.Value; var user = await _userManager.FindByNameAsync(email); var data = _registrationService.GetAllByIdAsync(user.Id).ToList(); var result = data.Select(s => new RegistrationsModel { Id = s.Id, Date = s.Date, StartTime = s.StartTime, EndTime = s.EndTime.GetValueOrDefault() }); var responseConfig = new HALModelConfig { LinkBase = $"{Request.Scheme}://{Request.Host.ToString()}", ForceHAL = Request.ContentType == "application/hal+json" }; var response = new HALResponse(responseConfig); response.AddEmbeddedCollection("registrations", result); response.AddLinks( new Link("self", "/api/registration/", null, "GET") ); return(this.HAL(response)); }
public static HALResponse AddEmbeddedResource <T>( this HALResponse self, string resourceName, T model, Link link) { return(self.AddEmbeddedResource(resourceName, model, new[] { link })); }
public void Sets_ForceHAL() { var hal = new HALResponse(new HALModelConfig { ForceHAL = true }); Assert.Equal(hal.Config.ForceHAL, true); }
public void Sets_LinkBase() { var hal = new HALResponse(new HALModelConfig { LinkBase = "some-link-base" }); Assert.Equal(hal.Config.LinkBase, "some-link-base"); }
public static HALResponse AddEmbeddedCollection <T>( this HALResponse self, string collectionName, IEnumerable <T> models, Link link) { return(self.AddEmbeddedCollection(collectionName, models, new[] { link })); }
public void Has_Link(object model, Link linkAOne, Link linkATwo, Link linkB, string embeddedName, object[] embedded) { var response = new HALResponse(model) .AddLinks(linkAOne); Assert.True(response.HasLink(linkAOne.Rel)); Assert.False(response.HasLink(linkB.Rel)); }
public void Should_not_be_able_to_convert_HalReponse_with_attribute_marked_model() { var model = new PersonModelWithAttributes(); var halResponse = new HALResponse(model); var converter = new HALAttributeConverter(); Assert.False(converter.CanConvert(halResponse.GetType())); }
public IActionResult Post([FromBody] Invoice invoice) { _invoiceAccess.AddInvoice(invoice); var resource = new InvoiceResource(invoice); var response = new HALResponse(resource).AddSelfLink(Request); return(Ok(response)); }
public void Has_Link(object model, Link[] links, string expectedHal, string expectedPlain) { var response = new HALResponse(model) .AddLinks(links); Assert.True(response.HasLink("a")); Assert.True(response.HasLink("b")); Assert.False(response.HasLink("c")); }
public IActionResult GetRoot() { var response = new HALResponse(null) .AddLinks(new Link("clientes", _urlHelper.Link("GetClientes", new { }), null, "GET")) .AddLinks(new Link("clientes_destacados", _urlHelper.Link("GetClientesVIP", new { }), null, "GET")) .AddLinks(new Link("create_cliente", _urlHelper.Link("CreateCliente", new { }), null, "POST")); return(this.Ok(response)); }
public static HALResponse AddSelfLinkIfNotExists(this HALResponse response, HttpRequest request) { if (!response.HasSelfLink()) { response.AddSelfLink(request); } return(response); }
public static IApplicationBuilder UseIndex(this IApplicationBuilder builder) { var resource = new IndexResource(); var response = new HALResponse(IndexRepresentation.Instance, resource); return(builder.MapMethods("/", (HttpMethod.Get, GetIndex))); ValueTask <Response> GetIndex(HttpContext context) => new ValueTask <Response>(response); }
protected HALResponse HAL(IEnumerable <HALResponse> collectionToEmbed, string collectionName = "data") { var hal = new HALResponse(new CollectionSummary { Count = collectionToEmbed.Count() }) .AddEmbeddedCollection(collectionName, collectionToEmbed) .AddSelfLink(HttpContext.Request); return(hal); }
private static HALResponse ModelToHal(Customer model) { var hal = new HALResponse(model).AddLinkToSelf($"/{endpoint}/{model.Id}"); if (model.LabelId != null) { hal.AddLink(new Link("label", $"/{LabelsController.endpoint}/{model.LabelId}")); } return(hal); }
public IActionResult Get() { var response = new HALResponse(null) .AddLinks( new Link("self", "/api/Root"), LinkGenerator.Users.GetAll(), LinkGenerator.Users.Create() ); return Ok(response); }
public void Hal_Model(HttpStatusCode statusCode, bool forceHal, string linkBase) { var halModel = new HALResponse(new HALModelConfig { ForceHAL = forceHal, LinkBase = linkBase }); var result = this.controller.HAL(halModel, statuscode: statusCode) as NegotiatedContentResult <HALResponse>; AssertHalModelResult(statusCode, linkBase, forceHal, result); }
public ActionResult <IEnumerable <Dish> > GetDishes() { var dishId = _context.Dishes.ToList().First().DishId; // Return a fooBar resource with embedded bars var response = new HALResponse(_context.Dishes.ToList()) .AddLinks(new Link[] { new Link("self", "/api/v1/dishes/{DishId}") }); return(this.Ok(response)); }
public IActionResult Get(int id) { if (id.Equals(0) || _sportAccess.GetSport(id) == null) { return(BadRequest()); } var resource = new SportResource(_sportAccess.GetSport(id)); var response = new HALResponse(resource).AddSelfLink(Request).AddLinks( new Link("sport", "/api/Sport/", null, "GET")); return(Ok(response)); }
public async Task <IActionResult> GetUserProfile(Guid id) { var user = await _usersRepository.GetUserAsync(id); var results = Mapper.Map <UserDto>(user); var response = new HALResponse(results) .AddLinks(new Link("self", $"/core/v1/users/{id}")) .AddLinks(new Link("profiles", "/core/v1/profiles/{Email}")); return(Ok(response)); }
public static IActionResult HAL(this ControllerBase controller, IEnumerable <Link> links, string relativeLinkBase = "~/", HttpStatusCode statuscode = HttpStatusCode.OK) { string linkBase = GetLinkBase(controller, relativeLinkBase); var hyperMedia = new HALResponse(new HALModelConfig { ForceHAL = true, // If we're only returning links, always return them LinkBase = linkBase }); hyperMedia.AddLinks(links); return(hyperMedia.ToActionResult(controller, statuscode)); }
public HALResponse Convert(object model) { if(!this.CanConvert(model?.GetType())) { throw new InvalidOperationException(); } var resolver = new HALAttributeResolver(); var halConfig = resolver.GetConfig(model); var response = new HALResponse(model, halConfig); response.AddLinks(resolver.GetLinks(model)); response.AddEmbeddedCollections(resolver.GetEmbeddedCollections(model, halConfig)); return response; }
public IEnumerable<KeyValuePair<string, IEnumerable<HALResponse>>> GetEmbeddedCollections(object model, IHALModelConfig config) { var type = model.GetType(); var embeddedModelProperties = type.GetTypeInfo().GetProperties().Where(x => x.IsDefined(typeof(HalEmbeddedAttribute))); foreach(var propertyInfo in embeddedModelProperties) { var embeddAttribute = propertyInfo.GetCustomAttribute(typeof(HalEmbeddedAttribute)) as HalEmbeddedAttribute; if(embeddAttribute == null) continue; var modelValue = propertyInfo.GetValue(model); var embeddedItems = modelValue as IEnumerable<object> ?? new List<object> { modelValue }; var halResponses = embeddedItems.Select(embeddedModel => { var response = new HALResponse(embeddedModel, config); response.AddLinks(this.GetLinks(embeddedModel)); response.AddEmbeddedCollections(this.GetEmbeddedCollections(embeddedModel, config)); return response; }); yield return new KeyValuePair<string, IEnumerable<HALResponse>>(embeddAttribute.CollectionName, halResponses); } }