ASP.NET MVC 4 Cookie未保存在Azure上,而是保存在本地

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

标签: jquery asp.net-mvc asp.net-mvc-4 azure

我有一个使用javascript调用的ASP.NET MVC 4项目。我准备把我的头发拉出来,因为我无法弄清楚为什么这不适用于Azure服务器,但在本地它的工作就像一个魅力。我有以下行动:

public HttpStatusCodeResult Index()
    {
        //Save the Cookie
        CookieUtil.CreateCookie("CookieName",  "completeCookieContent", CookieExpiration); //cookie expiration is dynamically calculated in another function to be 30 days later

        Response.AddHeader("x-frame-options", "DENY");
        Response.StatusCode = (int)HttpStatusCode.NoContent;
        Response.Cache.SetLastModified(DateTime.Now);
        Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);
        Response.Expires = -1500;
        Response.Cache.SetNoStore();
        Response.ExpiresAbsolute = DateTime.Now.AddYears(-1);

        return new HttpStatusCodeResult(HttpStatusCode.NoContent, "No Content");
    }

我的CreateCookie助手如下:

public static void CreateCookie(string cookieName, string value, int? expirationDays)
    {
        HttpCookie Cookie = new HttpCookie(cookieName, value);
        if (expirationDays.HasValue)
            Cookie.Expires = DateTime.Now.AddDays(expirationDays.Value);
        HttpContext.Current.Response.Cookies.Add(Cookie);
    }

我通过另一个网站(crossDomain)的Jquery Load函数远程调用此页面(可能这是问题)

在本地,如果我使用一个使用相同加载功能的简单html页面进行测试,一切正常,并且cookie在localhost下创建。一旦我在azure(网站)上传这段代码,我就接到电话,它返回204无内容。但Cookie不会被我的域名删除。什么

可能是问题?我错过了一个不允许这个动作的基础吗?我怎么能克服这个?

1 个答案:

答案 0 :(得分:1)

要允许其他域使用您应用程序中的某些内容,您必须在Global.asax中指定:

protected void Application_BeginRequest(object sender, EventArgs e)
{
    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");    
    /*HttpContext.Current.Response.AddHeader(
      "Access-Control-Allow-Origin", 
      "http://AllowedDomain.com"); */
}

'*'表示这是公共访问权限,如果您使用自己的域名,则会使其更加苛刻。

参考:Cross-Origin requests and ASP.NET MVC