Laden...

ASP.NET Web Api Abfrage führt zu Serverfehler

Erstellt von tpW510 vor 11 Jahren Letzter Beitrag vor 11 Jahren 3.054 Views
T
tpW510 Themenstarter:in
25 Beiträge seit 2011
vor 11 Jahren
ASP.NET Web Api Abfrage führt zu Serverfehler

Guten Morgen zusammen,
ich versuche mich gerade in ASP.NET Web Apis einzuarbeiten und habe ein Problem bei dem ich ganz schön auf dem Schlauch stehe.

Ich habe ein ASP.NET MVC 4 - Web API Projekt erstellt und will darin einfach ein paar Personen anzeigen. Ich habe dazu

  • einen HomeController : Controller erstellt um die Daten anzuzeigen
  • einen AthleteController : ApiController erstellt um über die API Daten abzuholen

Im Hintergrund habe ich ein einfaches Repository erstellt welches mir beispielsweise alle Personen in der Datenbank anzeigen soll:

Auszug aus GenericRepository


public class GenericRepository<C, T> : IGenericRepository<T>
        where T: class where C: WoContext, new()
    {
        
        private C _context = new C();
        public C Context
        {

            get { return _context; }
            set { _context = value; }
        }

        public IQueryable<T> Get()
        {
            var query = _context.Set<T>();
            return query;
        }

Mein HomeController:


public class HomeController : Controller
    {
        private readonly WoPersonRepository _repository = new WoPersonRepository();

        public ActionResult Index()
        {
            return View(_repository.Get());
        }
    }

Mein Api Controller:


    public class AthleteController : ApiController
    {
        private readonly WoPersonRepository _repository = new WoPersonRepository();

        public IEnumerable<WoPerson> GetAllAthletes()
        {
            return _repository.Get();
        }

        public WoPerson GetAthlete(Guid id)
        {
            
            return _repository.Get(p => p.Id == id).FirstOrDefault();

        }

Jetzt habe ich folgendes Problem. Wenn ich die Seite starte über VS2011 dann bekomme ich ja den HomeController angezeigt. Hier werden alle in der Datenbank befindlichen Daten auch aufgelistet.

Mache ich jetzt ein http://localhost:2345/api/athlete

bekomme ich einen Serverfehler. Beim Debuggen bringt er mir einen Count von 0.

Die Frage ist jetzt was ich falsch mache? Muss ich bei einem ApiController etwas besonderes beachten?

Meine web.config


<?xml version="1.0" encoding="utf-8"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <connectionStrings>
    <add name="WoContext"
         providerName="System.Data.SqlClient"
         connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;initial catalog=TestDb"/>
    </connectionStrings>
  <appSettings>

Meine Route.config


public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    }

Vielleicht hat jemand einen Tipp für mich?

Vielen Dank,
Benedikt

16.842 Beiträge seit 2008
vor 11 Jahren

... und wie lautet der Serverfehler? Da stehts detailliert drin, was falsch ist.

V
66 Beiträge seit 2010
vor 11 Jahren

... und wie lautet der Serverfehler? Da stehts detailliert drin, was falsch ist.

Du meinst eine Beachtung der [Hinweis] Wie poste ich richtig? Punkt 5? Ach komm, das wäre doch jetzt wirklich zu einfach...

16.842 Beiträge seit 2008
vor 11 Jahren

Mh? Willst jetzt verraten, was der Server für nen Fehler wirft oder nicht? Sonst können wirs lassen. 🤔

Dass der Aufruf durch http://localhost:2345/api/athlete prinzipiell nen Fehler wirft sollte doch an für sich klar sein. Du rufst zwar den Controller "athlete" auf - aber gar keine Methode....? Auch in der Route ist kein Standard definiert, sondern nur ne ID.

Und nein, man muss beim ApiController nichts besonderes beachten. Das ist ja das tolle an dem Ding.

T
tpW510 Themenstarter:in
25 Beiträge seit 2011
vor 11 Jahren

Mh? Willst jetzt verraten, was der Server für nen Fehler wirft oder nicht? Sonst können wirs lassen. 👶

Mh?! Es soll doch tatsächlich Leute geben die auch noch etwas arbeiten müssen, eine Familie haben oder einfach mal keine Lust auf Internet.

Dass der Aufruf durch
>
prinzipiell nen Fehler wirft sollte doch an für sich klar sein. Du rufst zwar den Controller "athlete" auf - aber gar keine Methode....? Auch in der Route ist kein Standard definiert, sondern nur ne ID.

Wie soll ich es formulieren? Das ist Quatsch was du schreibst. Das würde ja einem RESTful Ansatz widersprechen. Egal, ich will hier nicht auch noch mit Halbwissen um mich schmeißen.

Grundsätzlich funktioniert das ganze schon. Wenn ich einfach ein String-Array zurückliefere in meiner Get() Methode bekomme ich auch die XML bzw. den JSON Satz angezeigt. Spricht also auch gegen Deine Theorie.

Und nein, man muss beim ApiController nichts besonderes beachten. Das ist ja das tolle an dem Ding.

Danke. Das war doch schon einmal hilfreich.

ZUM FEHLER:
Ich habe momentan einfach nur eine Page die mir den Serverfehler 500 Internal Server Error meldet. Leider bekomme ich den IIS momentan nicht so konfiguriert, dass er mir weiter, hilfreichere Nachrichten ausspuckt.

Vielleicht hat hier jemand einen Tipp?

Wenn jemand bereit ist mir auf vernünftige Art und Weise zu helfen nehme ich die Tipps und Ratschläge gerne an.

Aber ich muss mich hier nicht anmachen lassen nur weil jemand denkt mit 2000 Posts hätte er Ahnung und ein Anrecht auf eine 1 Stunden Antwortzeit. Dafür ist mir die Zeit zu Schade.

Ich bin gerne bereit auf einer normalen Basis zu diskutieren. Ich habe die Weisheit auch nicht mit Löffeln gefressen und wie gesagt, bin ich auf dem Gebiet kein Experte.

Vielen Dank,
Benedikt

S
167 Beiträge seit 2008
vor 11 Jahren

Hallo,
möglicherweise kommt der Fehler daher, dass bei einem Aufruf von http://localhost:2345/api/athlete die Guid null wäre.
Also entweder Guid? oder mal testweise den Parameter ganz rauswerfen.

Ansonsten schau mal hier:
Introduction to the ASP.NET Web API

T
tpW510 Themenstarter:in
25 Beiträge seit 2011
vor 11 Jahren

Vielen Dank. Der Link ist super, Danke. Hm, ja die Guid ist hier vielleicht wirklich nicht glücklich gewählt. Ich werde das mal austesten.

VG, Benedikt

3.170 Beiträge seit 2006
vor 11 Jahren

Hallo,

Ich habe momentan einfach nur eine Page die mir den Serverfehler 500 Internal Server Error meldet.

Dann findest Du vielleicht was darüber im EventLog des Servers.

Aber ich muss mich hier nicht anmachen lassen

War vermutlich nur ein Missverständnis, bei dem Abt davon ausging, vagtlers Antwort sei von Dir gekommen 😦

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

16.842 Beiträge seit 2008
vor 11 Jahren

Oh - davon bin ich sogar wirklich ausgegangen 8o. Trotzdem kann man ein wenig mehr Freundlichkeit entgegen bringen, wenn einem geholfen werden soll - und nicht solche haltlosen Vorwürfe in den Raum werfen.

Nichts desto trotz stimmt der Aufruf des Controllers nicht.
Auch eine GUID ist hier "sinnlos", da eben der Controller aber nicht die Methode augerufen wird.
Siehe auch den Punkt Getting a Set of Records with the ASP.NET Web API unter http://stephenwalther.com/archive/2012/03/05/introduction-to-the-asp-net-web-api.aspx

Schau Dir jabbr.net an. Das ist 'das' Vorzeigeprojekt von ASP.NET MVC + WebApi + SignalR.

Dass der Server nur ein 500 zurück gibt ist hier nicht korrekt.
Er muss auch den Fehler zurück geben, sofern er auf GET-Anfragen konfiguriert ist und darauf zugegriffen wird. Zudem können die Fehlermeldungen alle in Application_Error in der Global.asax.cs abgefangen werden.

T
tpW510 Themenstarter:in
25 Beiträge seit 2011
vor 11 Jahren

Das war nicht meine Absicht. Aus der Emotion heraus. Dafür Entschuldige ich mich.

Schau Dir jabbr.net an. Das ist 'das' Vorzeigeprojekt von ASP.NET MVC + WebApi + SignalR.

Danke. Werde ich mir anschauen.

Dass der Server nur ein 500 zurück gibt ist hier nicht korrekt.
Er muss auch den Fehler zurück geben, sofern er auf GET-Anfragen konfiguriert ist und darauf zugegriffen wird. Zudem können die Fehlermeldungen alle in Application_Error in der Global.asax.cs abgefangen werden.

Auch das werde ich weiterhin verfolgen.

Danke für die Hinweise. Ich werde dem ganzen weiter versuchen auf den Grund zu gehen.

VG, Benedikt