Я увидел эту страницу и почти сдался, но затем наткнулся на эту статью от Крейга в PluralSight.Это дало мне идею вернуть 401 из ASP.Net вместо IIS, поэтому в IIS включена анонимная проверка подлинности.
Вот шаги, чтобы обойти эту проблему.
Шаг 1:Включите анонимную аутентификацию и аутентификацию Windows в IIS.
Шаг 2: Добавьте этот код в свой Global.asax.cs
Кредит / Спасибо: Uploadify (сеанс и аутентификация) с 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: /1857053/uploadify-flesh-zagruzka-failov-i-vstroennaya-proverka-podlinnosti-windows
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);
}
Шаг 3: Обновите javascript, вызывающий uploadify, для включения ключа авторизации формы и сеансового ключа.
<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 }
});
Шаг 4: Обновите ваш web.config
<system.web>
...
<authentication mode="Forms">
<forms defaultUrl="/" />
</authentication>
...