vdh*_*ant 5 browser iis flash file-upload uploadify
我在使用Uploadify时遇到了问题,希望有人可以提供帮助.我已将Uploadify放入我的应用程序,并且所有工作正常(使用VS Web服务器).一切正常并检查,直到我将应用程序部署到使用集成Windows身份验证的测试环境中.
当我实际上去上传文件时,浏览器会显示登录提示.此时,即使您输入正确的用户名和密码,该请求似乎也无法完成,即使您告诉浏览器记住密码,它仍然会显示登录提示.
当这种情况开始发生时,我决定旋转Fiddler,看看发生了什么.但是猜猜是什么,当Fiddler正在运行问题时不会发生.
不幸的是,我无法让运行Fiddler成为运行应用程序的必要条件.因此,任何人都有任何想法.我知道在使用表单身份验证时,Uploadify/flash存在一些问题,但我认为它们并未贯彻到集成Windows身份验证.
小智 3
我看到这个页面,几乎放弃了,但后来我在 PluralSight 上看到了 Craig 的这篇文章。这给了我从 ASP.Net 而不是 IIS 返回 401 的想法,这就是在 IIS 中启用匿名身份验证的原因。
以下是解决该问题的步骤。
步骤 1:在 IIS 中启用匿名身份验证和 Windows 身份验证。
步骤 2:将此代码添加到您的 Global.asax.cs
信用/感谢: 使用 ASP.NET MVC 上传(会话和身份验证)
注意:在我的版本中,只有 POST 请求使用特殊逻辑,因为我只希望此代码适用于上传。换句话说,我删除了 GET 请求的代码。如果您想支持 GET,请查看上面的链接。
protected void Application_BeginRequest(object sender, EventArgs e)
{
/* we guess at this point session is not already retrieved by application so we recreate cookie with the session id... */
try
{
string session_param_name = "ASPSESSID";
string session_cookie_name = "ASP.NET_SessionId";
if (HttpContext.Current.Request.Form[session_param_name] != null)
{
UpdateCookie(session_cookie_name, HttpContext.Current.Request.Form[session_param_name]);
}
}
catch
{
}
try
{
string auth_param_name = "AUTHID";
string auth_cookie_name = FormsAuthentication.FormsCookieName;
if (HttpContext.Current.Request.Form[auth_param_name] != null)
{
UpdateCookie(auth_cookie_name, HttpContext.Current.Request.Form[auth_param_name]);
return; // this is an uploadify request....get out of here.
}
}
catch
{
}
// handle the windows authentication while keeping anonymous turned on in IIS.
// see: /sf/ask/178494011/
if (Request.ServerVariables["LOGON_USER"].Length == 0) // They haven't provided credentials yet
{
Response.StatusCode = 401;
Response.StatusDescription = "Unauthorized";
Response.End();
return;
}
FormsAuthentication.SetAuthCookie(Request.ServerVariables["LOGON_USER"], true);
}
private void UpdateCookie(string cookie_name, string cookie_value)
{
HttpCookie cookie = HttpContext.Current.Request.Cookies.Get(cookie_name);
if (null == cookie)
{
cookie = new HttpCookie(cookie_name);
}
cookie.Value = cookie_value;
HttpContext.Current.Request.Cookies.Set(cookie);
}
Run Code Online (Sandbox Code Playgroud)
步骤 3:更新调用 uploadify 的 javascript 以包含表单的身份验证密钥和会话密钥。
<script>
var auth = "<% = Request.Cookies[FormsAuthentication.FormsCookieName]==null ? string.Empty : Request.Cookies[FormsAuthentication.FormsCookieName].Value %>";
var ASPSESSID = "<%= Session.SessionID %>";
$("#uploadifyLogo").uploadify({
...
scriptData: { ASPSESSID: ASPSESSID, AUTHID: auth }
});
Run Code Online (Sandbox Code Playgroud)
第 4 步:更新您的 web.config
<system.web>
...
<authentication mode="Forms">
<forms defaultUrl="/" />
</authentication>
...
Run Code Online (Sandbox Code Playgroud)