So aktivieren Sie CORs in ASP.Net Core WebAPIC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 So aktivieren Sie CORs in ASP.Net Core WebAPI

Post by Anonymous »

Was ich versuche zu tun
Ich habe eine Backend -ASP.NET -Kern -Web -API, die auf einem Azure -kostenlosen Plan gehostet wird (fügen Sie Standard -Sicherheits -Header hinzu. NET CORE). Die Client -Anwendung wird nicht auf Azure gehostet, sondern auf Github -Seiten oder auf einem anderen Webhosting -Dienst gehostet, auf den ich Zugriff habe. Aus diesem Grund werden die Domainnamen nicht ausgerichtet. Es weigert sich zu arbeiten. Ich rufe die APIs durch Ajax in JQuery an. Die React -Site funktioniert, so dass ich weiß, dass es nicht das ist. Der JQuery -API -Anruf funktioniert, wie ich bei Versuch bestätigt habe. So tätige ich die Anrufe < /p>

Code: Select all

    var apiUrl = "http://andrewgodfroyportfolioapi.azurewebsites.net/api/Authentication";
//alert(username + "|" + password + "|" + apiUrl);
$.ajax({
url: apiUrl,
type: "POST",
data: {
username: username,
password: password
},
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
var authenticatedUser = JSON.parse(response);
//alert("Data Loaded: " + authenticatedUser);
if (onComplete != null) {
onComplete(authenticatedUser);
}
},
error: function (xhr, status, error) {
//alert(xhr.responseText);
if (onComplete != null) {
onComplete(xhr.responseText);
}
}
});
< /code>

[b] Was habe ich versucht < /strong> < /p>

< Strong> Versuch 1 - Die richtige Art [/b] 
https://learn.microsoft.com/en-us/aspnet/core/security/cors 
Ich habe dieses Tutorial auf der Microsoft -Website zu einem T befolgt, um alle drei Optionen für die globale Aktivierung im Start -up.cs zu aktivieren, jeden Controller aufzubauen und jede Aktion auszuprobieren. < /p >
Befolgt dieser Methode funktioniert die Querdomäne, jedoch nur für eine einzelne Aktion auf einem einzelnen Controller (post in den AccountController). Für alles andere weigert sich die Microsoft.aspnetcore.cors 
Middleware, die Header zu setzen. .2
Hier ist, wie ich es in startup.cs
eingerichtet habe

Code: Select all

    // This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
// Add Cors
services.AddCors(o => o.AddPolicy("MyPolicy", builder =>
{
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
}));

// Add framework services.
services.AddMvc();
services.Configure(options =>
{
options.Filters.Add(new CorsAuthorizationFilterFactory("MyPolicy"));
});

...
...
...
}

// This method gets called by the runtime. Use this method to configure
//the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env,
ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();

// Enable Cors
app.UseCors("MyPolicy");

//app.UseMvcWithDefaultRoute();
app.UseMvc();

...
...
...
}
< /code>
Wie Sie sehen können, mache ich alles wie erzählt. Ich füge beide Male vor MVC hinzu, und als das nicht funktioniert habe, habe ich versucht, [EnableCors ("MyPolicy")] 
auf jeden Controller als so
zu setzen

Code: Select all

[Route("api/[controller]")]
[EnableCors("MyPolicy")]
public class AdminController : Controller
Versuch 2 - Brute erzwingen
https://andrewlock.net /Addition-Default-Security-Header-in-ASP-Net-Core/
Nach mehreren Stunden des Versuchs des vorherigen Versuch Die Headers manuell und zwingen sie, jede Antwort zu laufen. Ich habe dies nach diesem Tutorial gemacht, wie man jede Antwort manuell Header hinzufügt.

Code: Select all

.AddCustomHeader("Access-Control-Allow-Origin", "*")
.AddCustomHeader("Access-Control-Allow-Methods", "*")
.AddCustomHeader("Access-Control-Allow-Headers", "*")
.AddCustomHeader("Access-Control-Max-Age", "86400")
< /code>
Dies sind andere Header, die ich ausprobiert habe, was fehlgeschlagen ist < /p>
.AddCustomHeader("Access-Control-Allow-Methods", "GET, POST, PUT, PATCH, DELETE")
.AddCustomHeader("Access-Control-Allow-Headers", "content-type, accept, X-PINGOTHER")
.AddCustomHeader("Access-Control-Allow-Headers", "X-PINGOTHER, Host, User-Agent, Accept, Accept: application/json, application/json, Accept-Language, Accept-Encoding, Access-Control-Request-Method, Access-Control-Request-Headers, Origin, Connection, Content-Type, Content-Type: application/json, Authorization, Connection, Origin, Referer")
< /code>
Mit dieser Methode werden die Cross -Site -Header ordnungsgemäß angewendet und sie werden in meiner Entwicklerkonsole und in Postboten angezeigt. Das Problem ist jedoch, dass der Webbrowser zwar die Access-Control-Owl-Owl-Origin 
-Prüfung übergibt, der Webbrowser jedoch eine zischende Anpassung auf (ich glaube), Access-Control-Allow-Header Angabe 415 (nicht unterstützter Medientyp ) < /code> < /p>
Die Brute -Kraft -Methode funktioniert also auch nicht < /p>

Schließlich < /strong> < /p>
Hat jemand dies zum Laufen gebracht und könnte eine Hand leihen oder mich einfach in die richtige Richtung weisen? < /p>

Bearbeiten < /strong> < /p>
Um die API -Aufrufe zum Durchführen zu erhalten, musste ich aufhören, JQuery zu verwenden und zu einem reinen JavaScript -XMLHTTPREquest < /Code> Format. Um die Antwort von MindingData zu befolgen, außer innerhalb der Methode konfigurieren die app.usecors vor app.usemvc . Mit den JavaScript -API -Lösungsoptionen. > Ich habe es geschafft, Versuch 2 (brutal zwingen) zum Arbeiten zu bekommen ... mit der einzigen Ausnahme, dass die Wildcard für den Zugangskontroll-Allow-Origin nicht funktioniert, und als solches habe ich Um die Domänen manuell zu setzen, die Zugriff darauf haben. Das heißt, es ist ein Start < /p>

Code: Select all

app.UseSecurityHeadersMiddleware(new SecurityHeadersBuilder()
.AddDefaultSecurePolicy()
.AddCustomHeader("Access-Control-Allow-Origin", "http://localhost:3000")
.AddCustomHeader("Access-Control-Allow-Methods", "OPTIONS, GET, POST, PUT, PATCH, DELETE")
.AddCustomHeader("Access-Control-Allow-Headers", "X-PINGOTHER, Content-Type, Authorization"));

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post