对象引用未设置为对象asp.net的实例,c#

时间:2013-11-20 02:23:22

标签: c# asp.net cookies

嘿伙计们,当我尝试将CartID分配给字符串时,我收到此错误。非常感谢任何帮助。感谢

private static string CartID
{
    get
    {
        HttpContext cont = HttpContext.Current;
        string id = cont.Request.Cookies["ShopCartID"].Value;

        if (cont.Request.Cookies["ShopCartID"] != null)
        {
            return id;
        }
        else
        {
            id = Guid.NewGuid().ToString();
            HttpCookie cookie = new HttpCookie("ShopCartID", id);
            int days = 7;
            DateTime currentDate = DateTime.Now;
            TimeSpan timeSpan = new TimeSpan(days, 0, 0, 0);
            DateTime expiration = currentDate.Add(timeSpan);
            cookie.Expires = expiration;
            cont.Response.Cookies.Add(cookie);
            return id.ToString();
        }
    }
}

2 个答案:

答案 0 :(得分:1)

你的问题中没有CartID(除了课程本身),所以我认为你的意思是ShopCartID

如果不存在具有该名称的Cookie,则

cont.Request.Cookies["ShopCartID"]可以返回null。您无法在Value引用上呼叫成员(在本例中为null)。您必须首先检查Cookie是否为null

HttpCookie cookie = cont.Request.Cookies["ShopCartID"];
string id = cookie != null ? cookie.Value : null;

修改

这种模式非常普遍,我的公共代码库已定义:

public static class ObjectExtensions
{
    public static TResult IfNotNull<TValue, TResult>(this TValue value, Func<TValue, TResult> @delegate)
        where TValue : class
    {
        if (@delegate == null)
        {
            throw new ArgumentNullException("delegate");
        }

        return value != null ? @delegate(value) : default(TResult);
    }
}

像这样使用:

string id = cont.Request.Cookies["ShopCartID"].IfNotNull(arg => arg.Value);

答案 1 :(得分:0)

尝试在访问cookie值之前进行空检查。目前,您的代码调用cont.Request.Cookies [“ShopCartID”]。值,如果cookie不存在则会失败。