WebApi, используя поддомен в asp.net - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть домен с настройкой поддомена для webapi:

  1. Основной домен (www.abc.com)
  2. субдомен (api.abc.com)

Теперь домен API получает доступ к данным корзины покупок вошедших в систему пользователей через членство ASP.Net, а затем через вызовы AJAX. Я получаю доступ к нему в основном домене (www.abc.com)

Я могу получить доступ к данным о членстве в asp.net на api.abc.com, однако, когда я пытаюсь использовать функцию AJAX на своем главном сайте, в это время членство в asp.net всегда возвращает нуль, из-за чего Я не могу получить доступ к информации о корзине текущего зарегистрированного пользователя.

Я пытался обновить следующие вещи, но не сработало:

  1. Добавлен раздел структуры сущностей, чтобы разрешить доступ к моей базе данных (web.config)
  2. Убедитесь, что ключ компьютера одинаков для обоих доменов, чтобы шифрование работало (web.config)
  3. В проект Api добавлен CORS, чтобы домен доступа (www.abc.com) мог иметь к нему доступ. (WebApiConfig.cs)

Вот мой AJAX-вызов API для получения сведений о корзине:

$.getJSON([API URL], function (data) {
        if (data != null && data.length > 0)
            $(".right-side-toggle span.badge").html(data.length);
        else
            $(".right-side-toggle span.badge").html("0");
    });

Может ли кто-нибудь подсказать, в чем может быть проблема, когда AJAX звонит, членство возвращает NULL

ОБНОВЛЕНО

public List<ShoppingCartData> GetShoppingCart()
        {
            Guid _guid = new Guid();
            string whereClause = string.Empty;
            MembershipUser user = Membership.GetUser();
            if (user != null && !String.IsNullOrEmpty(user.UserName))
            {
                _guid = new Guid(user.ProviderUserKey.ToString());
                whereClause = " sc.UserId = '" + user.ProviderUserKey.ToString() + "' ";
            }
            else if (HttpContext.Current.Request.Cookies[Common.SHOPPING_CART_COOKIE] != null)
            {
                _guid = new Guid(HttpContext.Current.Request.Cookies[Common.SHOPPING_CART_COOKIE].Value);
                whereClause = " sc.CartId = '" + HttpContext.Current.Request.Cookies[Common.SHOPPING_CART_COOKIE].Value + "' ";
            }
            else
            {
                return null;
            }

            string query = "select scd.Id as ShoppingCartDetailsId, sc.CartId, p.ProductId, scd.Quantity, p.[Name], p.[Description], p.OurPrice, p.MaximumRetailPrice, pi.[Image], p.CurrencyId from dbo.ShoppingCart sc " +
                "inner join dbo.ShoppingCartDetails scd " +
                "on sc.CartId = scd.CartId " +
                "inner join dbo.Product p " +
                "on scd.ProductId = p.ProductId " +
                "inner join dbo.ProductToImages pi " +
                "on p.ProductId = pi.ProductId " +
                "where " + whereClause + "" +
                "and ISNULL(sc.IsCheckoutProcessed, 0) = 0";

            return db.Database.SqlQuery<ShoppingCartData>(query).ToList();
        }

Приведенный выше код находится в отдельной сборке, предназначенной для обоих (API и основной домен (www.abc.com))

...