-1
votes

CORS dans ASP.Net MVC avec SignalR provoque l'erreur «Access-Control-Allow-Origin»

J'utilise SignalR (v2.4.0) dans un projet ASP.NET MVC avec Angular 8 et rencontre "Accès à XMLHttpRequest à 'https: /demo.com/signalr/negotiate? ClientProtocol = 2.1 & connectionData =' from origin ' http: // localhost: 20700 'a été bloqué par la stratégie CORS: aucun en-tête' Access-Control-Allow-Origin 'n'est présent sur la ressource demandée. " erreur lors du débogage (également erreur similaire à l'étape PROD). J'ai essayé d'appliquer des correctifs sur la configuration de Access-Control-Allow-Origin dans ASP.Net MVC - la méthode la plus simple possible , mais la plupart d'entre eux n'ont pas fonctionné ou pas un correctif global. Au lieu d'appliquer l'étape Controller, je préférerais un correctif global dans Global.asax ou Startup.cs (j'ai également essayé les correctifs web.config, mais je n'ai jamais fonctionné). Alors, existe-t-il une solution globale à ce problème?

Mise à jour: voici ma configuration pour résoudre le problème:

Startup.cs:

<system.webServer>

    <httpProtocol>
        <customHeaders>
            <add name="Access-Control-Allow-Origin" value="http://localhost:20700"/>
            <add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE,OPTIONS"/>
            <add name="Access-Control-Allow-Headers" value="Content-Type"/>
        </customHeaders>
    </httpProtocol>    

</system.webServer>

web.config:

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Owin;
using Owin;

[assembly: OwinStartup(typeof(Demo.Web.UI.App_Start.Startup))]
namespace Demo.Web.UI.App_Start
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.MapSignalR();
        }
    }
}


0 commentaires

3 Réponses :


1
votes

Pour travailler pour moi, j'avais ceci dans ma startup.cs ...

Dans la méthode "ConfigureServices":

[EnableCors]
[Route("api/[controller]")]
[ApiController]
public class SampleController : ControllerBase
{
  ...
}

Dans la méthode "Configurer", j'avais ceci:

app.UseCors(builder => {
    builder.WithOrigins("https://www.websitename.com").AllowAnyHeader().AllowAnyMethod();
});

Ensuite, dans mon contrôleur, j'avais cet attribut:

services.AddCors(options => {
         options.AddDefaultPolicy(builder => {
             builder.WithOrigins("https://www.websitename.com").AllowAnyHeader().AllowAnyMethod();
         });
});

Est ce que ça aide?


10 commentaires

Merci de votre aide. MAIS, j'utilise ASP.NET MVC et il n'y a pas de méthode AddCors . Pourriez-vous s'il vous plaît publier Startup.cs en utilisant des bibliothèques? De plus, je préférerais un correctif global au lieu d'ajouter la [EnableCors("AllowOrigin")] à chaque contrôleur. Une idée?


Vous pouvez ajouter les paramètres CORS dans web.config. C'est généralement comme ça que je fais. gist.github.com/Jalalhejazi/5653347


Code modifié ci-dessus pour en faire une stratégie globale par défaut au lieu d'une stratégie spécifiquement nommée


@Svend J'avais déjà essayé comme indiqué sur la configuration d'Access-Control-Allow-Origin dans ASP.Net MVC - problème de méthode le plus simple possible. Mais j'obtiens "Impossible d' accéder à la page demandée car les données de configuration associées pour la page ne sont pas valides." erreur, puis supprimez la ligne Access-Control-Allow-Methods. Mais dans ce cas, rencontrez toujours "L'accès à XMLHttpRequest à 'https: /demo.com/signalr/negotiate? ClientProtocol = 2.1 & connec‌ tionData =' from origin ' localhost: 20700 ' a été bloqué par la stratégie CORS: Non 'Access-Control L'en-tête -Allow-Origin 'est présent sur la ressource demandée. " Erreur. Une idée?


@RobMcCabe Mais ASP.NET MVC et il n'y a pas de méthode AddCors. Une idée?


@RobMcCabe J'ai ajouté une mise à jour.


Impressionnant! Merci d'avoir partagé


@RobMcCabe Une aide s'il vous plaît? Le problème persiste même si j'ai essayé de nombreuses approches différentes :(


Désolé, je n'ai implémenté cela que dans ASP.net Core - cela devrait être assez simple. Cet article semble offrir une aide pour votre version de .net Framework ASP.net: docs.microsoft.com/en-us/aspnet/web-api/overview/security / ...


@hexadecimal Si vous voyez ce msg, vous avez quelque chose de funky sur le serveur IIS (probablement). Avez-vous google à quoi a conduit ce message d'erreur? Par exemple: stackoverflow.com/questions/9216158/...



0
votes

Sur votre startup.cs:

//Branch the pipeline for requests that start with "/signalr"
app.Map("/signalr", map =>
{
    map.UseCors(CorsOptions.AllowAll);
    var hubConfiguration = new HubConfiguration { };
    hubConfiguration.EnableDetailedErrors = true;
    map.RunSignalR(hubConfiguration);
});

...

using Microsoft.Owin.Cors;
using Microsoft.AspNet.SignalR;


0 commentaires

0
votes

sur votre modification de fichier web.config add name = "Access-Control-Allow-Origin" value = "http: // localhost: 20700" pour ajouter name = "Access-Control-Allow-Origin" value = "*"


0 commentaires