C # Использование Ajax для получения данных из бэкэнда после входа в Azure AD - PullRequest
1 голос
/ 11 декабря 2019

Я создаю приложение, используя asp .net core 3.1 с Единый вход Azure .

Моя проблема заключается в том, когда я развертываю приложение наAzure, я могу не беспокоиться, однако, когда я использую Ajax для связи с серверной частью (контроллером) для извлечения данных в популярные поля, которые требуются, я получаю эту ошибку Cross-Origin Read Blocking (CORB) blocked cross-origin response https://login.microsoftonline.com/common/oauth2/authorize?cl

Из того, что я могу понять из проведенного мною исследования, эта функция была создана для предотвращения злонамеренного захвата и была представлена ​​Консорциумом World Wide Web.

Похоже, она пытаетсяполучить повторную авторизацию от Azure, когда я уже выполнил вход, что заставляет меня поверить, что Ajax не передает куки или токен из браузера.

Вот функция из файла .cshtml

function GetPageSize() {
    $.ajax({
        type: 'POST',
        url: 'path=' + $('#jobTypeId').val(),
        data: $('#myform').serialize(),
        success: function (data) {
           // Does Stuff
        },
        error: function (data) {
           // Does Other Stuff
        },
    });
}

И вот часть контроллера.

[Authorize]
public class HomeController : Controller
{
    private readonly ILogger<HomeController> _logger;
    private readonly IWebHostEnvironment _env;

    /// <summary>
    /// 
    /// </summary>
    /// <param name="logger"></param>
    public HomeController(ILogger<HomeController> logger, IWebHostEnvironment env)
    {
        _logger = logger;
        _env = env;
    }

    public IActionResult Index() => View();

    /// <summary>
    /// 
    /// </summary>
    /// <returns></returns>
    [Route("Home/Path/{str?}")]
    [HttpPost]
    public IActionResult GetFunc()([FromQuery] string str)
    {
        using (ApiHelper apiHelper= new ApiHelper (Startup.Configuration.GetSection("ConnectionString")["connectionString"]))
        {
            // Do Some Stuff And Return Json
        }
    }
 }

А вот и ApiHelper (я не думаю, что это не имеет значения, однако вот он)

 /// <summary>
/// 
/// </summary>
public class ApiHelper : IDisposable
{
    /// <summary>
    /// 
    /// </summary>
    public LockString ConnectionString { get; set; }

    /// <summary>
    /// 
    /// </summary>
    /// <param name="connectionString"></param>
    public ApiHelper(string connectionString) => ConnectionString = new LockString(connectionString);

    /// <summary>
    /// 
    /// </summary>
    /// <returns></returns>
    public IEnumerable<MyType> Func()
    {
        // Connect to sql
        // Return results.            
    }

Я попытался добавить

services.AddCors(options =>
        {
            options.AddDefaultPolicy(
                builder =>
                {
                    builder.AllowAnyOrigin();
                    builder.AllowAnyMethod();
                    builder.AllowAnyOrigin();
                    builder.AllowAnyHeader();
                });
        });

в ConfigureServices и app.UseCors(); в конфигурации (у меня не было UseMVC, поэтому я добавил его выше app.UseHttpsRefirection(), но я все еще получаю ту же ошибку, упомянутую выше.

1 Ответ

0 голосов
/ 11 декабря 2019

Я использую этот тип для получения файла JSON с контроллера, который использует [HttpPost]

 function GetPageSize() {
        $.ajax({
            type: 'POST',
            url: '/Home/test',
            data: JSON.stringify(),
            contentType: "application/json",
            dataType: "json",
            success: function (data) {
               // Does Stuff
            },
            error: function (data) {
               // Does Other Stuff
            },
        });
    }

, и это контроллер и функция:

[Authorize]
    public class HomeController : Controller
    {
    public JsonResult test()
    {

            SqlSelect ="any query it's just an example";

        string result = SqlRequest(SqlSelect);



        //Source data returned as JSON    
        return Json(result, JsonRequestBehavior.AllowGet);
    }
}

надеюсь, это поможетВы кое как.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...