Warum wird die Antwort von meiner Web-API nicht ordnungsgemäß erstellt?

9

Ich habe ein sehr einfaches Web-API-Beispiel, das ich mit Beispielcode aus dieser Anleitung :

Code

Relevanter Abschnitt Web.config

%Vor%

Routenkonfiguration

%Vor%

Modell anzeigen

%Vor%

ApiController

%Vor%

und es nutzt ITSurveyEntities , das ein generiertes ADO.NET-Entitätsdatenmodell aus der Datenbank war, das momentan nur eine einzelne Tabelle enthält, Survey .

Kurz gesagt, ich glaube nicht, dass ich hier etwas Besonderes versuche.

Aktuelles Ergebnis

Wenn ich versuche, mit etwas wie http://localhost:1681/api/surveys zur API zu navigieren, erhalte ich eine Antwort, aber die Datei heißt surveys ohne Erweiterung. Weiter, wenn ich versuche Save As und sage es eine txt Erweiterung, schlägt der Download einfach fehl.

Erwartetes Ergebnis

Ich würde erwarten, dass die API den Dateinamen surveys.json zurückgibt, wie das Beispielprojekt mit products , und der Browser würde mich bitten, die Datei zu öffnen oder zu speichern.

Was ich versucht habe

Vergleichen von Web.config-Dateien

Ich habe die Web.config -Dateien zwischen meinem Projekt und dem Beispielcode aus dem funktionierenden Tutorial verglichen.

Vergleichen des Routings

Ich habe die Routing-Konfiguration zwischen meinem Projekt und dem Beispielcode aus dem funktionierenden Tutorial verglichen.

Ausschließen von WebDav

Ich habe versucht, WebDav auszuschließen, da meine Suche darauf hindeutet, dass dies der Grund sein könnte. Ich habe das getan, indem ich die Web.config in einer Weise geändert habe, die Was ist in diesem Blog .

UPDATE 1

Okay, nach der Anleitung von Joe Enos stellte ich fest, dass das View-Modell auch den Namen Survey hatte und daher einen Fehler bezüglich der Mehrdeutigkeit zwischen dem CLR-Typ und dem EDM-Typ verursachte.

Ich habe das gelöst, indem ich das View-Modell in SurveyViewModel umbenannt habe, und die Anfrage an http://localhost:1681/api/surveys gibt nun HTTP 200 zurück und lädt die Datei wie erwartet herunter.

    
Mike Perrenoud 08.08.2013, 16:02
quelle

2 Antworten

2

Wenn Sie die rohe Anfrage und Antwort mit Fiddler oder den Dev-Tools Ihres Browsers betrachten, sollten Sie einige Hinweise auf das Problem finden.

    
Joe Enos 08.08.2013, 18:44
quelle
2

Der Antworttyp (xml, json usw.) wird durch den accept-Header in Ihrer Anfrage bestimmt. Sie haben nicht erwähnt, welchen Browser Sie verwendet haben, um den Dienst anzurufen, aber ich glaube, es gibt Unterschiede im Standardannahmekopf zwischen Browsern. Wenn Sie nur Json-Daten von Webapi zurückgeben möchten, fügen Sie dem Global.Asax Folgendes hinzu:

%Vor%

Media Formatters sind im Wesentlichen, wie die Daten aus der Webapi-Methode für den Browser serialisiert werden.

    
JasonD 08.08.2013 16:27
quelle