none
Dot net core - MVC - CORS RRS feed

  • Domanda

  • Buongiorno.

    Ho un controller MVC che fornisce un JSON.

    Dal client dot net core ho una chiamata jquery senza headers che ha esito positivo, con headers ho problemi di CORS.

    La chiamata jquery con headers verso un service interno non ha problemi.

    Chrome

    Access to XMLHttpRequest at 'https://localhost:44394/Home/GetToken' from origin 'https://localhost:44315' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.

    Nel web.config dell’app MVC ho

    <httpProtocol>

                        <customHeaders>                        

                               <add name="Access-Control-Allow-Origin" value="*" />

                               <add name="Access-Control-Allow-Headers" value="X-AspNet-Version,X-Powered-By,Date,Server,Accept,Accept-Encoding,Accept-Language,Cache-Control,Connection,Content-Length,Content-Type,Host,Origin,Pragma,Referer,User-Agent" />

                               <add name="Access-Control-Allow-Methods" value="GET, PUT, POST, DELETE, OPTIONS" />                            

                        </customHeaders>

                 </httpProtocol>

           </system.webServer>

    </configuration>


    CONTROLLER

    public ActionResult GetToken()

            {

                string testAuth = Request.Headers["Authorization"];

                ViewModelToken info = new ViewModelToken

                {

                    utente = "UTENTETEST",

                    pwd = "pwddemo",

                    token = "1n3h5fgh4mkl5ni67jbj8k9b0j"

                };

                return Json(new { com = info }, JsonRequestBehavior.AllowGet);

            }

    Chiamante dot net core

    $(function () {

            $('#ButtonToken3').click(function () {

                $.ajax({

                    "type": "GET",

                    "url": "https://localhost:44394/Home/GetToken",

                    headers: { "Authorization": "TestToken" },

                    "datatype": "json",

                    error: function (response) {

                        console.log(response);

                    },

                    success: function (response) {

                        console.log(response);

                    }

                });

            });

        });

    STARTUP.CS

      public void ConfigureServices(IServiceCollection services)

            {

                ….

                services.AddCors();

                …..

            }

       public void Configure(IApplicationBuilder app, IWebHostEnvironment env)

            {

    …..

      app.UseCors(builder => builder

                .AllowAnyOrigin()

                .AllowAnyMethod()

                .AllowAnyHeader());

    Devo installare qualcosa nell'app MVC che fornisce il servizio?

    Avete qualche idea?

    Sergio


    SERGIO MACCARI


    • Modificato SERGIO_MAC giovedì 14 gennaio 2021 10:34
    giovedì 14 gennaio 2021 10:27

Risposte

  • Ciao,

    Con struttura come questa di sotto non avrai problemi con i headers:

    const headers = new Headers({
      "Content-Type": "application/json",
      "Authorization": "Basic bmltZXNoLnBhdGVsQHRhdHZhc29mdC5jb206cGFzc3dvcmQ="  
    });
    
    fetch('http://192.168.0.239:9090/ws/login', {
      method: 'GET',
      headers,
    }).then().then().catch();

    Microsoft offre questo servizio gratuitamente, per aiutare gli utenti e aumentare il database dei prodotti e delle tecnologie. Il contenuto fornito “as is“ non comporta alcuna responsabilità da parte dell’azienda.

    venerdì 29 gennaio 2021 06:36
    Moderatore

Tutte le risposte

  • Ciao Sergio,

    Facciamo vedere se qualcuno potra` dare consiglii.

    Grazie per l`interesante domanda!


    Microsoft offre questo servizio gratuitamente, per aiutare gli utenti e aumentare il database dei prodotti e delle tecnologie. Il contenuto fornito “as is“ non comporta alcuna responsabilità da parte dell’azienda.

    venerdì 15 gennaio 2021 06:04
    Moderatore
  • Ciao,

    Con struttura come questa di sotto non avrai problemi con i headers:

    const headers = new Headers({
      "Content-Type": "application/json",
      "Authorization": "Basic bmltZXNoLnBhdGVsQHRhdHZhc29mdC5jb206cGFzc3dvcmQ="  
    });
    
    fetch('http://192.168.0.239:9090/ws/login', {
      method: 'GET',
      headers,
    }).then().then().catch();

    Microsoft offre questo servizio gratuitamente, per aiutare gli utenti e aumentare il database dei prodotti e delle tecnologie. Il contenuto fornito “as is“ non comporta alcuna responsabilità da parte dell’azienda.

    venerdì 29 gennaio 2021 06:36
    Moderatore
  • Buongiorno,

    grazie per la segnalazione

    Ho risolto con questa opzione sul server

    startup.cs

     app.UseCors(
       options => options.SetIsOriginAllowed(x => _ = true).AllowAnyMethod().AllowAnyHeader().AllowCredentials()
                    );

    Saluti


    SERGIO MACCARI

    venerdì 29 gennaio 2021 08:53