2017-02-20 7 views
1

Ahoy Coder Freunde.WEB-API: Ich kann CORS (?) Anscheinend nicht aktivieren

Nach dieser Frage Angular 2 + web api kam mir in den Sinn, dass ich CORS für mein Frontend aktivieren muss, um meine Back-End-Web-API zu erreichen.

Aber selbst wenn ich diese Schritte versucht http://www.infragistics.com/community/blogs/dhananjay_kumar/archive/2015/08/31/how-to-enable-cors-in-the-asp-net-web-api.aspx sowie diese https://enable-cors.org/server_aspnet.html, anscheinend nichts geändert: wenn ich versuche, http://localhost:58825/api/character mit Postbote zu erreichen, habe ich die Liste der Zeichen erhalten erwartet, aber es gibt keine CORS-Header (allow-Ursprung usw.) in der Antwort. Was das Frontend angeht, sehen Sie vielleicht in der verknüpften Frage, dass angular nicht einmal die API findet.

ist hier die entsprechende Probe von web.config:

public static void Register(HttpConfiguration config) 
    { 
     // Web API configuration and services 
     config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html")); 
     var cors = new EnableCorsAttribute("http://localhost:3000", "*", "*"); 
     config.EnableCors(cors); 

Neben der Steuerung:

public class CharacterController : ApiController 
{ 
    private readonly CharacterRepository repo = new CharacterRepository(); 
    JavaScriptSerializer jsonConverter = new JavaScriptSerializer(); 

    [EnableCors(origins:"http://localhost:3000", headers:"*", methods:"*")] 
    // GET: api/Character 
    public IEnumerable<string> GetAll() 
    { 
     List<Character> myCharacs = repo.Get().ToList(); 
     List<String> myJsonCharacs = new List<string>(); 
     foreach (var charac in myCharacs) 
     { 
      var cur = jsonConverter.Serialize(charac); 
      myJsonCharacs.Add(cur); 
     } 

     return myJsonCharacs; 
     //return myCharacs; 
    } 

Offensichtlich habe ich die nuget Paket Microsoft.AspNet.WebApi.Cors hinzugefügt (5.2 .2).

Ich habe versucht, die Lösung zu reinigen, Rebuild, VS neu starten ... Ich habe die "Ähnlichkeitsfrage" hier auf SO gefragt, aber ich habe nicht einmal die "keine Header" Ausnahme, scheinen meine Anforderungen Passiere, ohne af * ck über CORS zu geben.

My Front-End-Anwendung auf localhost: 3000, ist mein api auf localhost: 58225 (Ich beginne es über Visual Studio, wenn dies etwas ändert)

Weiß jemand, was ich kläglich bin Fahren? (Mit Ausnahme von Leben, das ist kein Problem, ich bin daran gewöhnt)

Edit: möglich doublon von Asp.Net WebApi2 Enable CORS not working with AspNet.WebApi.Cors 5.2.3

Re-Edit: Ich weiß nicht, ob es ein echter doublon ist, aber ich schaffte es zu lösen mein Problem durch

add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." 
verb="GET,HEAD,POST,PUT,DELETE"  
type="System.Web.Handlers.TransferRequestHandler"  
preCondition="integratedMode,runtimeVersionv4.0"/

meine webconfig Datei hinzufügen, wie in der ursprünglichen Post beschrieben, und ich sehe jetzt die Header in Postbote.

Antwort

1

Wenn Sie CORS ermöglichen müssen Sie auf die Startup.cs Datei gehen und fügen Sie:

using Microsoft.Owin.Cors; 

Anfang an. Dann haben Sie zwei Möglichkeiten:

  1. Sie geben die Ursprünge:

    var corsPolicy = new CorsPolicy { AllowAnyHeader = true, AllowAnyMethod = true }; 
         corsPolicy.Origins.Add("your origin"); 
         var corsOptions = new CorsOptions 
            { 
             PolicyProvider = new CorsPolicyProvider 
             { 
              PolicyResolver = context => Task.FromResult(corsPolicy) 
             } 
            }; 
    
  2. Sie erlauben alle:

    app.UseCors(CorsOptions.AllowAll); 
    

Jeder von ihnen geschieht in der Configuration Verfahren .

+0

Dies ist ein Web-API-Projekt, es gibt keine startup.cs-Datei. – DoctorPrisme

+0

Dann sollte es zu einer der Dateien hinzufügen, in denen der Code ausgeführt wird, bevor Ihre API ausgeführt wird. Eine solche Datei ist 'Global.asax'. Darüber hinaus gibt es eine 'Startup.cs' Datei in einem' WebApi' Projekt, wenn Sie 'Microsoft Identity' für die Authentifizierung verwenden. – StefanL19

+0

Nun, ich verwende keine Microsoft-Authentifizierung, und die Frage besagt, dass ich ähnliche Schritte in WebApiConfig gemacht habe. Ich verstehe nicht, warum das Hinzufügen der Header in webconfig den Trick gemacht hat und das Hinzufügen von ihnen irgendwo anders war nicht genug: / – DoctorPrisme

Verwandte Themen