2017-03-12 1 views
1

J'essaye d'invoquer mon service localement mais IE et Edge ne sont pas en mesure de le trouver. Ci-dessous l'extrait de code que j'ai et mon application de console fonctionne sans aucune erreur.ASP.NET Web auto hébergé Api: IE - Cette page ne peut être affichée

Program.cs

public class Program 
    { 
     static void Main() 
     { 
      string baseAddress = "http://127.0.0.1:8080/"; 

      // Start OWIN host 
      using (WebApp.Start(url: baseAddress)) 
      { 
       Console.WriteLine("Service Listening at " + baseAddress); 

       System.Threading.Thread.Sleep(-1); 
      } 
     } 
    } 

Startup.cs

public class Startup 
    { 
     public void Configuration(IAppBuilder appBuilder) 
     { 
      HttpConfiguration config = new HttpConfiguration(); 
      config.EnableCors(); 
      config.Routes.MapHttpRoute(
       name: "DefaultApi", 
       routeTemplate: "api/{controller}/{id}", 
       defaults: new { id = RouteParameter.Optional } 
      ); 

      appBuilder.UseWebApi(config); 
     } 
    } 

WebController.cs

public class Web 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
     public string Description { get; set; } 
    } 

    [EnableCors(origins: "*", headers: "*", methods: "*")] 
    public class WebController : ApiController 
    { 
     Web[] websites = new Web[] 
     { 
      new Web { Id = 1, Name = "XYZ", Description = "XYZ"}, 
      new Web { Id = 2, Name = "ABC", Description = "ABC"} 
     }; 

     // GET api/Web 
     public IEnumerable Get() 
     { 
      return websites; 
     } 

     // GET api/Web/5 
     public Web Get(int id) 
     { 
      try 
      { 
       return websites[id]; 
      } 
      catch (Exception e) 
      { 
       return new Web(); 
      } 
     } 

     // POST api/values 
     public void Post([FromBody]string value) 
     { 
      Console.WriteLine("Post method called with value = " + value); 
     } 

     // PUT api/values/5 
     public void Put(int id, [FromBody]string value) 
     { 
      Console.WriteLine("Put method called with value = " + value); 
     } 

     // DELETE api/values/5 
     public void Delete(int id) 
     { 
      Console.WriteLine("Delete method called with id = " + id); 
     } 
    } 

j'invoque mon service sur IE comme tout le monde: http://127.0.0.1:8080/api/web à tout le Web GET Objet.

J'ai installé deux paquets supplémentaires: OWIN et CORS.

Quelqu'un pourrait-il aider à trouver une solution à ce problème

+0

Pouvez-vous éditer/mettre à jour votre question pour inclure le message d'erreur que ce soit IE/Edge log à la console devtools? Et qu'est-ce que votre code JavaScript qui ressemble à la requête? – sideshowbarker

+0

essayez d'utiliser chrome/postier. Je ne sais pas sur le bord mais j'ai eu récemment un problème similaire avec IE parce qu'il a des problèmes pour résoudre localhost – MistyK

Répondre

0

Je viens d'essayer et votre api fonctionne correctement Edge et Chrome. Il peut arriver que IE n'envoie pas l'en-tête Accepter correctement, ce qui fait que l'un ou l'autre serveur renvoie un résultat ou une erreur erroné ou IE ne peut pas interpréter la réponse. En fait, j'ai vérifier et IE propose de sauvegarder le fichier json car il ne peut pas l'afficher correctement.

Pour afficher explicitement j'ai modifié vous codez un peu:

public IHttpActionResult Get(string type = null) 
{ 
    var response = new HttpResponseMessage(HttpStatusCode.OK); 

    if (type == "json") 
    { 
     response.Content = new StringContent(JsonConvert.SerializeObject(websites)); 
     response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); 
    } 
    else if (type == "xml") 
    { 
     response.Content = new StringContent("<xmlTag>Value</xmlTag>"); 
     response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/xml"); 
    } 

    return ResponseMessage(response); 
} 

Essayez de suivre http://127.0.0.1:8080/api/web?type=json et http://127.0.0.1:8080/api/web?type=xml urls et vérifiez vous-même.