Помните, что в архитектуре MVC по умолчанию каждое действие может быть вызвано/воспроизведено без учета состояния - то есть правильно сформированный запрос приведет к соответствующему действию, так что AuthorizeAttribute
и другие такие атрибуты будут оцениваться только после соответствующего действия . На самом деле это не особенность MVC, так как это особенность веб-архитектуры в целом.
Загрузка файла, как и любое другое значение POST
, в котором оно отправляется как часть запроса. Теперь у вас может быть асинхронный (ajax) элемент управления загрузкой файлов, но даже в этом случае загрузка файла - это еще один простой запрос.
MVC не может выбрать, будет ли ваш клиент решает отправить ему большой запрос или небольшой запрос или любой запрос вообще. MVC может реагировать только на запрос, который ваш клиент хочет сделать.
Несомненно, вы должны иметь [Authorize]
перед своим действием POST
. Но чтобы пользователи не тратили время на загрузку файла, только чтобы отклонить его на POST
, вы также должны сделать что-то в пользовательском интерфейсе, чтобы препятствовать или не позволять пользователям легко делать такой запрос, когда они не аутентифицируются.
Другими словами, вы должны запрограммировать клиента работать в тандеме с сервером, чтобы определить, следует ли поощрять пользователя к загрузке.
Один простых, что вы можете сделать, это проверка на User.Identity.IsAuthenticated
и отображение формы, когда истинная:
@if (User.Identity.IsAuthenticated)
{
// display form razor
}
else
{
// display login razor
}
Вы также мог бы перехватывать представление с JavaScript, который является более глубоким внедрением, но в основном будет идти что-то вроде это:
- на представить, проверьте, если проверка подлинности пользователя (может включать серверный вызов на лету или вы можете рассчитывать на клиента, чтобы определить это, если это уместно)
- Если не проверяется подлинностью, не допускается подача и вместо этого показывать модем мода
Надеюсь, что это поможет.
отправьте ваш контрольный код здесь .. –