web-dev-qa-db-ja.com

Cookie ASP.NETおよびMVCを作成する

私は非常に単純な問題を抱えています-サーバーで作成されたCookieをクライアントで作成したいです。私は多くの pages を見つけ、それをどのように使用するかを見つけました-しかし、私はいつも同じ時点で立ち往生しています。

DBへの要求があるときに呼び出されるDBControllerがあります。

DBControllerのコンストラクターは次のとおりです。

public class DBController : Controller
{
    public DBController()
    {
        HttpCookie StudentCookies = new HttpCookie("StudentCookies");
        StudentCookies.Value = "hallo";
        StudentCookies.Expires = DateTime.Now.AddHours(1);
        Response.Cookies.Add(StudentCookies);
        Response.Flush();
    }

    [... more code ...]

}

次の場所でエラー「オブジェクト参照がオブジェクトのインスタンスに設定されていません」が表示されます。

StudentCookies.Expire = DateTime.Now.AddHours(1)

これは一種の基本的なエラーメッセージです-だから私はどんな種類の基本的なことを忘れましたか?

15
yesfabime

問題は、コントローラーのコンストラクターで応答に追加できないことです。 Responseオブジェクトは作成されていないため、null参照を取得しています。Cookieを追加するメソッドを追加し、アクションメソッドで呼び出してみてください。そのようです:

private HttpCookie CreateStudentCookie()
{
    HttpCookie StudentCookies = new HttpCookie("StudentCookies");
    StudentCookies.Value = "hallo";
    StudentCookies.Expires = DateTime.Now.AddHours(1);
    return StudentCookies;
}

//some action method
Response.Cookies.Add(CreateStudentCookie());
21
James Ralston

Response.Cookie.Add()は複数のCookieを追加できますが、SetCookie()は既存のCookieを更新するため、Response.SetCookie()を使用します。だからあなたの問題は解決できると思う。

public DBController()
{
    HttpCookie StudentCookies = new HttpCookie("StudentCookies");
    StudentCookies.Value = "hallo";
    StudentCookies.Expires = DateTime.Now.AddHours(1);
    Response.SetCookie(StudentCookies);
    Response.Flush();
}
9
Shekhar Patel

コンストラクターの代わりにコントローラーのInitialize()メソッドを使用できます。初期化関数では、Requestオブジェクトを使用できます。 Responseobjectでも同じアクションを実行できると思います。

0
Radu