使用asp.net中的子域的WebApi

时间:2018-11-08 14:09:41

标签: c# asp.net ajax asp.net-web-api asp.net-membership

我有一个带有子域设置的webapi域:

  1. 主域(www.abc.com)
  2. 子域(api.abc.com)

现在,API域通过ASP.Net成员身份访问登录用户的购物车数据,然后通过AJAX调用在主域(www.abc.com)上访问它

我能够访问api.abc.com中的asp.net成员资格数据,但是当我尝试在主站点上使用AJAX函数时,由于该原因,asp.net成员资格始终返回null。我无法访问当前登录用户的购物车详细信息。

我尝试更新以下内容,但没有成功:

  1. 添加了实体框架部分,以便允许访问我的数据库(web.config)
  2. 确保两个域中的计算机密钥相同,以便加密正常工作(web.config)
  3. 在Api项目中添加了CORS,以便允许目标域(www.abc.com)对其进行访问。 (WebApiConfig.cs)

这是我对api的AJAX调用,以提取购物车详细信息:

$.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))

0 个答案:

没有答案