У меня есть домен с настройкой поддомена для webapi:
- Основной домен (www.abc.com)
- субдомен (api.abc.com)
Теперь домен API получает доступ к данным корзины покупок вошедших в систему пользователей через членство ASP.Net, а затем через вызовы AJAX. Я получаю доступ к нему в основном домене (www.abc.com)
Я могу получить доступ к данным о членстве в asp.net на api.abc.com, однако, когда я пытаюсь использовать функцию AJAX на своем главном сайте, в это время членство в asp.net всегда возвращает нуль, из-за чего Я не могу получить доступ к информации о корзине текущего зарегистрированного пользователя.
Я пытался обновить следующие вещи, но не сработало:
- Добавлен раздел структуры сущностей, чтобы разрешить доступ к моей базе данных (web.config)
- Убедитесь, что ключ компьютера одинаков для обоих доменов, чтобы шифрование работало (web.config)
- В проект 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))