1

ASP.NET MVC3 Webアプリケーションを作成していますが、Ajaxでアクションメソッドを呼び出すと、ユーザー認証が失敗します(ユーザーは認証されません)。私の電話は次のようになります。

$(function () {
                $("#picture").makeAsyncUploader({
                    upload_url: '@Url.Action("AsyncUpload", "Profile")',
                    flash_url: '/Scripts/swfupload.swf',
                    button_image_url: '/Scripts/blankButton.png'
                });
            });

ここで、makeAsyncUploaderは、すべてのAJAXのものを処理する別のjsファイル内の関数です。アプリケーションのデバッグを試みましたが、リクエストでCookieが送信されていないようです。誰かが何が問題なのか知っていますか?

4

1 に答える 1

2

かなり古い質問ですが、今日もまったく同じ問題があったので、答えます。

FirefoxのFlashplgにバグがあります。ファイルのアップロード時にCookieは送信されません。私の解決策:

1)新しい承認属性を作成します

  [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
    public class FlashAuthorizeAttribute : AuthorizeAttribute
    {
        private const string AUTH_TOKEN = "AuthenticationToken4Flash";
        protected override bool AuthorizeCore(System.Web.HttpContextBase httpContext)
        {
            string authToken = httpContext.Request.Params[AUTH_TOKEN];
            if (authToken != null)
            {
                FormsAuthenticationTicket authForm = FormsAuthentication.Decrypt(authToken);
                if (authForm != null)
                {
                    FormsIdentity formIdentity = new FormsIdentity(authForm);
                    string[] userRoles = System.Web.Security.Roles.GetRolesForUser(formIdentity.Name);
                    GenericPrincipal userPrincipal = new GenericPrincipal(formIdentity, userRoles);
                    httpContext.User = userPrincipal;
                }
            }
            return base.AuthorizeCore(httpContext);
        }
    }

2)コントローラー

   [FlashAuthorize]
    public ActionResult AsyncUpload()
    {
        HttpPostedFileBase file = Request.Files[0];
    }

3)jsを変更します(formData、scriptDataが機能しなかったため、クエリ文字列を追加しました)

      upload_url: '@Url.Action("AsyncUpload", "Profile")' +'?AuthenticationToken4Flash=' + '@(Request.Cookies[FormsAuthentication.FormsCookieName]==null ? string.Empty : Request.Cookies[FormsAuthentication.FormsCookieName].Value)',

私はそれが誰かを助けることを願っています

于 2012-11-11T19:49:57.093 に答える