944 messaggi dal 11 febbraio 2013
Utilizzando webapi con EF ottengo errore 500

se uso un api di test funziona
public class TestController : ApiController
    {
        // GET: api/Test
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

function getTest() {
    $.ajax({
        type: "GET",
        dataType: "json",
        url: "/api/Test",
        success:function(result) {
            console.log(result);
        },
        error:function() {
            console.error("Si è verificato un errore :(");
        }
    });
}

cosa può esserci che non va?
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,


con EF ottengo errore 500

Ok, ma che eccezione si sta verificando effettivamente?
Se premi F12 per accedere agli strumenti di sviluppo del browser e vai nella scheda "Rete" vedrai cosa sta rispondendo il server. Nella risposta troverai degli indizi.
Ovviamente, affinché ASP.NET riveli la vera natura dell'errore devi andare nel web.config e nel ramo system.web inserire:
<customErrors mode="Off" />


ciao,
Moreno

Enjoy learning and just keep making
944 messaggi dal 11 febbraio 2013
Si avevo già visto
nella scheda network vado nelle Headers e trovo
Request URL: http://localhost:65160/api/Ordinis
Request Method: GET
Status Code: 500 Internal Server Error
Remote Address: [::1]:65160
Referrer Policy: no-referrer-when-downgrade

in jquery
xhr.send( options.hasContent && options.data || null );
Modificato da jjchuck il 05 giugno 2018 20.38 -


<Error>
<Message>Si è verificato un errore.</Message>
<ExceptionMessage>
Il tipo 'ObjectContent`1' non è riuscito a serializzare il corpo della risposta per il tipo di contenuto 'application/xml; charset=utf-8'.
</ExceptionMessage>
<ExceptionType>System.InvalidOperationException</ExceptionType>
<StackTrace/>
<InnerException>
<Message>Si è verificato un errore.</Message>
<ExceptionMessage>
Il tipo 'System.Data.Entity.DynamicProxies.ORDINI_807D5DBAB4A9AED3B8DEABFF151A572542CB876C5D9595946391256C14F55601' con nome di contratto dati 'ORDINI_807D5DBAB4A9AED3B8DEABFF151A572542CB876C5D9595946391256C14F55601:http://schemas.datacontract.org/2004/07/System.Data.Entity.DynamicProxies' non è previsto. Provare a usare DataContractResolver se si usa DataContractSerializer o ad aggiungere in modo statico tipi non noti all'elenco di tipi noti, ad esempio usando l'attributo KnownTypeAttribute o aggiungendoli all'elenco di tipi noti passato al serializzatore.
</ExceptionMessage>
<ExceptionType>
System.Runtime.Serialization.SerializationException
</ExceptionType>
<StackTrace>

Modificato da jjchuck il 05 giugno 2018 20.40 -
11.886 messaggi dal 09 febbraio 2002
Contributi
Dunque... vedo che stai esponendo le entità nude e crude. A parte l'errore, non dovresti farlo perché è raro che il client debba vedere e modificare tutte le proprietà che hai nelle entità. Di solito si creano DTO per ridurre il numero di proprietà in modo che il client veda solo quelle strettamente necessarie.

Comunque, a parte questo, il problema si verifica perché il serializzatore XML è molto severo: gli viene chiesto di serializzare un tipo (la tua entità) e invece se ne trova un'altro (il proxy creato da EF che estende la tua entità). Direi di lasciar perdere questi dettagli, infatti potresti disabilitare la serializzazione XML del tutto, come vedi qui:
http://codebetter.com/glennblock/2012/02/26/disabling-the-xml-formatter-in-asp-net-web-apithe-easy-way-2/

Se la disabiliti, rimarrà solo il formatter json, che è l'unico che ti serve.
Se non vuoi disabilitare il formatter xml, devi quantomeno chiedere al server di darti del json nella tua richiesta ajax. ASP.NET Web api, infatti, può restituire sia xml che json in base a cosa viene chiesto dal client con l'intestazione Accept contenuta nella richiesta.
Tu che intestazione Accept stai mandando?
Vedo che hai impostato dataType: "json" e questo dovrebbe già essere sufficiente a mandare al server l'intestazione Accept: application/json quindi perché ti sta dando XML?

Leggi qui sul funzionamento della content negotiation in ASP.NET Web API.
https://docs.microsoft.com/en-us/aspnet/web-api/overview/formats-and-model-binding/content-negotiation

ciao,
Moreno
Modificato da BrightSoul il 05 giugno 2018 21.26 -

Enjoy learning and just keep making
944 messaggi dal 11 febbraio 2013
Request header:
Accept: application/json, text/javascript, */*; q=0.01

Domani vedo DTO...avevo letto nei design pattern
domani provo a limitare i campi da inviare

cmq non so perchè mi da quel messaggio : chiedo json
944 messaggi dal 11 febbraio 2013
Dimenticavo...grazie per l'aiuto
944 messaggi dal 11 febbraio 2013
Se disabilito xml come dici esce questo errore

"exceptionMessage": "Self referencing loop detected for property 'ORDINI' with type 'System.Data.Entity.DynamicProxies.ORDINI_807D5DBAB4A9AED3B8DEABFF151A572542CB876C5D9595946391256C14F55601'. Path '[0].RIGHE[0]'.",


Forse perchè ci sono Foreign Key ?
944 messaggi dal 11 febbraio 2013
Si è un errore dovuto alle FK

Aggiungendo questo scompare
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;


Ora seguendo il tuo consiglio usero DTO.

Pero non so come fare l'architettura:
debbo fare un Crm cliente (avevo già postato) con dati di fatture, pagamenti...ecc
Sono tutte richieste GET in base al codice cliente inserito in una input.

Debbo creare tanti Dto per ogni entità ?

Soprattuto mi chiedo se dovendo creare somme e raggruppamenti debba farlo lato client:
esempio se voglio raggruppare la somma delle fatture per anno.
Modificato da jjchuck il 06 giugno 2018 15.21 -

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.