Вот код для моего базового контроллера, идея в том, что если строка авторизации отсутствует в заголовках HTTP, мы их исключаем.Я клянусь, что это работало должным образом, и теперь внезапно это не работает.Как ни странно, когда я отлаживаю, он фактически переходит в оператор if, так что действительно верно, что запрашиваемый мной заголовок HTTP является строкой NULL OR EMPTY, ОДНАКО, он не завершается досрочно и возвращает 403 Access Denied больше ... он работалхорошо, и внезапно это просто игнорирует все это и в конечном итоге приводит к сбою в приложении, когда я пытаюсь проанализировать строку авторизации, которая не была найдена.
public class AuthController : Controller
{
protected int AccountID;
protected override void OnAuthorization(AuthorizationContext filterContext)
{
//if no authorization string is provided, access denied
if (string.IsNullOrEmpty(filterContext.HttpContext.Request.Headers["Authorization"]))
{
filterContext.Result = Content("Access Denied", "text/plain");
filterContext.HttpContext.Response.StatusCode = 403; //forbidden
base.OnAuthorization(filterContext);
}
//otherwise grab the authorization string and validate it
string authString = filterContext.HttpContext.Request.Headers["Authorization"];
string urlPath = string.IsNullOrEmpty(filterContext.HttpContext.Request.Path) ? "" : filterContext.HttpContext.Request.Path;
int getAccountID = 0;
//if authorization fails...
if (!AuthCore.Authorize(authString, urlPath, ref getAccountID))
{
filterContext.Result = Content("Access Denied", "text/plain");
filterContext.HttpContext.Response.StatusCode = 403; //forbidden
base.OnAuthorization(filterContext);
}
//AccountID will never be zero at this point
AccountID = getAccountID;
//carry on with Controller Action, request is valid and AccountID is known
base.OnAuthorization(filterContext);
}
ОБНОВЛЕНИЕ : простопробовал filterContext.Result = new HttpUnauthorizedResult ();вместо этого, те же результаты.Действие контроллера продолжается и выдает ошибку при попытке разобрать строку заголовка, которая не была найдена.
ОБНОВЛЕНИЕ 2 : добавлено «return;»после каждого из вызовов base.OnAuthorization (), кроме последнего, теперь, когда он терпит неудачу, я получаю 302, перемещенный из MVC, сопровождаемый 404, который оказывается приложением, пытающимся перенаправить на URL страницы входа по умолчанию, который на самом деле несуществует ... это может быть достаточно хорошо?Может быть, но я бы предпочел заблокировать это прямо, а не позволять некоторому шаткому перенаправлению произойти, поскольку способ блокировать их, не кажется мне безопасным.