В моем веб-приложении MVC используются два типа пользователей.
- Первый в стандартном веб-браузере;
- Второй для REST, возвращающий только данные JSON.
Кроме того,
- Оба требуют аутентификации и авторизации;
- Оба сценария дифференцируются в зависимости от маршрута, поэтому я знаю, какой контент должен обслуживаться.
Когда пользователи обращаются к приложению, если они не вошли в систему, приложение должно реагировать по-разному.
- В первом случае он должен вернуть страницу входа в систему по умолчанию (это нормально).
- Во втором случае он должен вернуть только 401 неавторизованный код.
Я привык работать с сервисом WCF REST, где я мог бы создать такое исключение:
throw new WebProtocolException(System.Net.HttpStatusCode.Unauthorized, exc.Message, exc);
и получите сообщение 401. Проблема с тем же подходом в MVC, когда я помещаю statusCode
следующим образом:
HttpContext.Response.StatusCode = (Int32)HttpStatusCode.Unauthorized
он всегда перенаправляется на страницу входа в систему.
Как я могу это сделать?
Я попытался переопределить AuthorizeAttribute
и обработать функцию OnAuthorization
, но все же, как только я установил statusCode
в 401, он перенаправляется на страницу входа в систему.