Asp.net mvc 4 MVC 4中不希望的注销

Asp.net mvc 4 MVC 4中不希望的注销,asp.net-mvc-4,authentication,logoff,Asp.net Mvc 4,Authentication,Logoff,我在主机上发布项目后有这个问题,在开发环境中一切都好! 在我发布的MVC4.0网站中,当经过身份验证的用户尝试上载图片时,该用户已注销并重定向到登录页面。 我已使用以下代码上载图片并成功地在本地工作: private void TryUploadImages(Product product) { const string emptyImage = "empty.jpg"; try { for (int idx

我在主机上发布项目后有这个问题,在开发环境中一切都好! 在我发布的MVC4.0网站中,当经过身份验证的用户尝试上载图片时,该用户已注销并重定向到登录页面。 我已使用以下代码上载图片并成功地在本地工作:

    private void TryUploadImages(Product product)
    {
        const string emptyImage = "empty.jpg";
        try
        {
            for (int idx = 0; idx < 3; idx++)
            {
                if ((Request.Files.Count < 3) ||
                    (Request.Files[idx] == null) ||
                    (Request.Files[idx].ContentLength > 1024 * 1024 * 5) ||
                    (Request.Files[idx].ContentLength <= 0))
                {
                    if ((idx == 0 && string.IsNullOrEmpty(product.ImageFilename)) ||
                        (idx == 1 && string.IsNullOrEmpty(product.ThumbnailImage)) ||
                        (idx == 2 && string.IsNullOrEmpty(product.AttributesImage)))
                        throw new Exception(GlobalResources.Global_Image_Restrictions_Error);
                    continue;
                }
                HttpPostedFileBase uploadedFile = Request.Files[idx];

                string fileName = Path.GetFileName(uploadedFile.FileName);

                using (var img = Image.FromStream(uploadedFile.InputStream))
                { bool temp = img.Width > 0; }

                if (!string.IsNullOrEmpty(fileName))
                {
                    string[] filenames = {"product", "product-thumb", "attribute"};
                    fileName = string.Format("{0}-{1}{2}",
                                             filenames[idx],
                                             Guid.NewGuid().ToString().Replace("-", string.Empty),
                                             Path.GetExtension(fileName));

                    var physicalPath = Path.Combine(Server.MapPath("~/Images/sitepx/products/"), fileName);
                    uploadedFile.SaveAs(physicalPath);
                    switch (idx)
                    {
                        case 0:
                            product.ImageFilename = fileName;
                            break;
                        case 1:
                            product.ThumbnailImage = fileName;
                            break;
                        case 2:
                            product.AttributesImage = fileName;
                            break;
                    }
                }
                else
                {
                    switch (idx)
                    {
                        case 0:
                            product.ImageFilename = emptyImage;
                            break;
                        case 1:
                            product.ThumbnailImage = emptyImage;
                            break;
                        case 2:
                            product.AttributesImage = emptyImage;
                            break;
                    }
                }

            }
        }
        catch (Exception ex)
        {
            ViewBag.UploadError = ex.Message;
            product.ImageFilename = emptyImage;
        }
    }
此外,我为特定角色授权控制器,并出于安全原因禁用Web.config中的会话:

<httpModules>
  <-- blah blah blah ... -->
  <!-- Disable Session -->
  <remove name="Session" />
</httpModules>
<sessionState mode="Off" />
这是登录函数中使用的角色库ReturnRedirectUrl:

private string ReturnRedirectUrl(string returnUrl)
{
    if (string.IsNullOrEmpty(returnUrl) || !Url.IsLocalUrl(returnUrl))
    {
        foreach (var role in Roles.GetAllRoles().Where(Roles.IsUserInRole))
        {
            switch (role)
            {
                case "info":
                    returnUrl = Url.Action(MVC.SiteManage.Index(1));
                    break;
                case "support":
                    returnUrl = Url.Action(MVC.SiteManage.Index(2));
                    break;
                case "sales":
                    returnUrl = Url.Action(MVC.SiteManage.Index(3));
                    break;
                case "admin":
                    returnUrl = Url.Action(MVC.SiteManage.Index(6));
                    break;
                case "club-member":
                    returnUrl = Url.Action(MVC.SiteManage.Index());
                    break;
                case "vendor-reseller":
                    returnUrl = Url.Action(MVC.SiteManage.Index());
                    break;
                case "sales-reseller":
                    returnUrl = Url.Action(MVC.SiteManage.Index());
                    break;
            }
        }
    }
    return returnUrl;
}

上传功能是唯一的问题,还是其他需要身份验证的功能也有同样的问题?Hi Marthijn:正如您所猜测的,这可能发生在其他需要身份验证的功能中;但在上传功能中(几乎)总是这样的问题继续。也许问题出在登录方式上!我在编辑的帖子中提到了身份验证的详细信息……当您在web.config中启用会话时,它能工作吗?顺便说一下,你的登录方式似乎没有错。
[AllowAnonymous]
public virtual ActionResult Login(string returnUrl)
{

    if (User.Identity.IsAuthenticated)
        if (!string.IsNullOrEmpty(returnUrl) && Url.IsLocalUrl(returnUrl))
            return RedirectToLocal(returnUrl);
        else
            return Redirect(ReturnRedirectUrl(returnUrl));

    ViewBag.ReturnUrl = returnUrl;
    ViewBag.Roles = GetAllAccountRoles();
    return View();
}

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public virtual ActionResult Login(LoginModel model, string returnUrl)
{
    if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, model.RememberMe))
    {
        var location = ReturnRedirectUrl(returnUrl);
        return string.IsNullOrEmpty(location)
                ? RedirectToAction(MVC.Account.Login()) 
                : RedirectToLocal(location);
    }

    // If we got this far, something failed, redisplay form
    ModelState.AddModelError("", GlobalResources.Account_Login_ModelError);
    return View(model);
}
private string ReturnRedirectUrl(string returnUrl)
{
    if (string.IsNullOrEmpty(returnUrl) || !Url.IsLocalUrl(returnUrl))
    {
        foreach (var role in Roles.GetAllRoles().Where(Roles.IsUserInRole))
        {
            switch (role)
            {
                case "info":
                    returnUrl = Url.Action(MVC.SiteManage.Index(1));
                    break;
                case "support":
                    returnUrl = Url.Action(MVC.SiteManage.Index(2));
                    break;
                case "sales":
                    returnUrl = Url.Action(MVC.SiteManage.Index(3));
                    break;
                case "admin":
                    returnUrl = Url.Action(MVC.SiteManage.Index(6));
                    break;
                case "club-member":
                    returnUrl = Url.Action(MVC.SiteManage.Index());
                    break;
                case "vendor-reseller":
                    returnUrl = Url.Action(MVC.SiteManage.Index());
                    break;
                case "sales-reseller":
                    returnUrl = Url.Action(MVC.SiteManage.Index());
                    break;
            }
        }
    }
    return returnUrl;
}