Sto costruendo un servizio OData 3 su Web API 2.2.ODataController restituisce HTTP 406 non accettabile
Il servizio restituisce correttamente i metadati per le mie entità, ma restituisce 406 Not Available
quando interrogo una delle entità effettive. Ho fatto un bel po 'di ricerche (attualmente sto seguendo diversi tutorial), ma non ho trovato nulla che funzioni effettivamente.
Ecco la mia WebApiConfig:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
using System.Web.OData.Builder;
using System.Web.OData.Extensions;
namespace MyProject
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
ODataModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<MarvelCharacter>("MarvelCharacters");
config.MapODataServiceRoute(
routeName: "Marvel",
routePrefix: "dude",
model: builder.GetEdmModel());
}
}
}
E mio controller (non completo, ma si ottiene l'idea):
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Web.Http.OData;
using System.Web.Http.OData.Query;
using Microsoft.Data.OData;
using MyProject;
namespace MyProject.Controllers
{
public class MarvelCharactersController : ODataController
{
private static ODataValidationSettings _validationSettings = new ODataValidationSettings();
// GET: odata/MarvelCharacters
public IHttpActionResult GetMarvelCharacters(ODataQueryOptions<MarvelCharacter> queryOptions)
{
// validate the query.
try
{
queryOptions.Validate(_validationSettings);
}
catch (ODataException ex)
{
return BadRequest(ex.Message);
}
var entities = new myEntities();
var marvelCharacters = (from c in entities.MarvelCharacters select c).ToList();
return Ok<IEnumerable<MarvelCharacter>>(marvelCharacters);
}
}
}
Mi auguro che Microsoft abbia effettivamente utilizzato i numeri di telefono "OdataV3" e "OdataV4" invece di inserire nuove versioni qui e là, volenti o nolenti +1 per lo pseudonimo - ottima idea – bkwdesign
Ho lo stesso problema, prima configurazione con oData v3 e in seguito spostato su oData v4 e i controller creati con V4 iniziarono a dare errore 406. Creato un controller di nuovo con V3 per verificare il problema e si inizia a funzionare. Ora l'aggiornamento a V4 per tutti. – Zafar
Grazie mille! –