Asp net настройка приложения. Использование [IApplicationBuilder] - PullRequest
0 голосов
/ 02 апреля 2020

У меня проблемы с использованием app.Use

Сценарий таков:

У меня есть код в Startup.Configure, например:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    AR.Statistic.Visits.Initialize(Path.Combine(env.WebRootPath, "Statistics"));
    AR.Statistic.Visitors.Initialize(Path.Combine(env.WebRootPath, "Statistics"));

    var cultureInfo = new CultureInfo("en-US");
    cultureInfo.NumberFormat.NumberGroupSeparator = ",";
    cultureInfo.NumberFormat.NumberDecimalSeparator = ".";
    cultureInfo.NumberFormat.CurrencyDecimalSeparator = ",";
    cultureInfo.NumberFormat.CurrencyGroupSeparator = ",";
    CultureInfo.DefaultThreadCurrentCulture = cultureInfo;

    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseCookiePolicy();

    app.Use(async (context, next) =>
    {
        Program.AbsolutePath = env.WebRootPath;

        string path = context.Request.Path.Value.ToLower();


        // Linkovi koji su dostupni svima
        string[] links = new string[] { "/home/success", "/proizvod/", "/kontakt", "/porudzbina", "/home/dostava", "/user/registracija", "/home/pizaberijednokratnog", "/home/pizaberiprofi", "/user" };

        // Linkovi koji su dostupni profesionalnim kupcima
        string[] links1 = new string[] { "/proizvodi", "/korpa", "/user", "/admin" };

        // Linkovi koji su dostupni jednokratnim kupcima
        string[] links2 = new string[] { "/proizvodi", "/korpa" };


        bool Redirect = true;

        foreach (string s in links)
            if (path.Contains(s))
                Redirect = false;

        if (Security.isJednokratanKupac(context.Request))
        {
            foreach (string s in links2)
                if (path.Contains(s))
                    Redirect = false;

            if (path == "/")
                Redirect = false;
        }
        else if (Security.isProfiKupac(context.Request))
        {
            AR.ARWebAuthorization.ARWebAuthorizationUser u = AR.ARWebAuthorization.ARWebAuthorization.GetUser(context.Request.Cookies["h"]);
            if (u == null && !path.Contains("/user/alogin"))
            {
                context.Request.Path = "/User";
            }
            else
            {
                foreach (string s in links1)
                    if (path.Contains(s))
                        Redirect = false;

                if (path == "/")
                    Redirect = false;
            }
        }


        if (Redirect)
            context.Request.Path = "/Home/IzaberiTip";

        await next.Invoke();
    });

    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });
}

, и это работает хорошо с точки зрения перенаправления пользователя, учитывая его состояние входа (isProfiKupa c или isJednokratanKupa c) , но некоторые ajax вызовы не работают.

В настоящее время я пытаюсь исправьте это:

function UpdateKolicine(element) {
    _wait("Azuriranje kolicine...");

    $.ajax({
        type: "GET",
        url: "/Korpa/JIzmeniKolicinuUKorpi",
        data: {
            "RobaID": $(element).attr("data-robaid"),
            "Kolicina": $("input[data-robaid=" + $(element).attr("data-robaid") + "]").val()
        },
        success: function (data) {
            window.location.reload();
        }
    });
}

Как видите, этот вызывает функцию /Korpa/JIzmeniKolicinuUKorpi, и она срабатывает, но не так, как должно быть.

Я покажу, как проходит точка останова. код в этой функции:

public IActionResult JIzmeniKolicinuUKorpi(int? RobaID, double? Kolicina)
{
    if (RobaID == null)
        return Json("Id robe ne moze biti null!");

    if (Kolicina == null)
        return Json("Kolicina ne moze biti null!");

    AR.ARWebAuthorization.ARWebAuthorizationUser User = AR.ARWebAuthorization.ARWebAuthorization.GetUser(Request.Cookies["h"]);
    if (Security.isLogged(Request))
    {
        Jednokratan.KorpaItem.UpdateKolicina(Request, (int)RobaID, (int)Kolicina);
        return Json("Uspesno azurirana kolicina!");
    }
    else
    {

        AR.TDShop.User TDUser = User.LocalUserClass as AR.TDShop.User; // Breakpoint hits this line and then it jumps to `Configure` function from start of this question at line `await next.Invoke()`

        try
        {
            TDUser.Korpa.SetQuantity((int)RobaID, (double)Kolicina); // It never hits this line
            return Json("Uspesno azurirana kolicina!");
        }
        catch (AR.ARException ex)
        {
            return Json(ex.ToString());
        }
    }
}

Таким образом, как вы можете видеть в комментарии в приведенном выше коде, точка останова внезапно переходит к функции Configure в данной строке и никогда не продолжается. Это останавливает мой код и заставляет страницу просто зависать.

Что я делаю не так?

...