PDA

View Full Version : مشکل در چک کردن Session



SianiD
سه شنبه 23 مهر 1392, 15:06 عصر
سلام من دارم یه سبد خرید درست میکنم . با استفاده از Session که به یک مشکل بر خوردم .
کاری که انجام دادم : با استفاده از ایجکس کد محصول رو میفرستم به یک Api و در api این کد ها وجود دارند :



public int Get(int ProductID)
{
int cartitemscount = 0;
var Session = HttpContext.Current.Session;
List<ProductInShoppingCart> products = new List<ProductInShoppingCart>();

if (Session["ShoppingCartItems"] != null)
{
products = Session["ShoppingCartItems"] as List<ProductInShoppingCart>;

ProductInShoppingCart selected = products.Find(p => p.ProductID == ProductID);
if (selected != null)
{
selected.ProductCount++;
int index = products.FindIndex(p => p.ProductID == ProductID);
products[index] = selected;
}
else
{
selected = new ProductInShoppingCart() { ProductID = ProductID, ProductCount = 1 };
products.Add(selected);
}
Session["ShoppingCartItems"] = products;

}
else
{
ProductInShoppingCart selected = new ProductInShoppingCart() { ProductID = ProductID, ProductCount = 1 };
products.Add(selected);
Session["ShoppingCartItems"] = products;
}
foreach (var productInShoppingCart in products)
{
cartitemscount += productInShoppingCart.ProductCount;
}
return cartitemscount;
}



اما تو if اول که کدش پایین نوشتم ارور میده :



if (Session["ShoppingCartItems"] != null)




ارورش هم اینه :

Object reference not set to an instance of an object.

SianiD
سه شنبه 23 مهر 1392, 15:31 عصر
مشکل حل شد من باید اجازه استفاده از Session در ApiController رو به Api میدادم که با ساخت کلاس زیر :



public class MyHttpControllerHandler : HttpControllerHandler, IRequiresSessionState
{
public MyHttpControllerHandler(RouteData routeData): base(routeData)
{
}
}
public class MyHttpControllerRouteHandler : HttpControllerRouteHandler
{
protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return new MyHttpControllerHandler(requestContext.RouteData);
}
}




و همچنین این تغییرات در Global درست شد :



var apiroute = routes.MapHttpRoute( name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
apiroute.RouteHandler = new MyHttpControllerRouteHandler();