2016-01-04 4 views
0

Я хотел бы получать файлы с сайта asp.net, но я хотел бы проверить запрос с данными в базе данных, прежде чем отправлять файл клиенту.Asp.net C# пользовательский обработчик файлов

Для изображений, которые я бы погрузка с помощью стандартного тега HTML изображения, как это:

'<img src="/Uploads/RANDOMGUID/img.aspx" alt="The Moon" title="The Moon"> 

Запросов будут иметь случайный идентификатор GUID в пути, который отображает на поле в базе данных для сохраненного изображения.

Я хотел бы иметь одну точку входа для всех запросов это может быть ASPX или ASHX страница, например, [если там не лучший путь], это будет тогда:

  • Разбираем GUID из пути запроса
  • Проверьте, если запрашивающая сторона имеет доступ к запрошенной изображения или файла, используя данные базы данных
  • возвратить изображение ошибка или файл, если не авторизован
  • Если разрешено возвращать содержимое файла и установить тип содержимого

Как следует реализовать такие функции? Нужно ли мне расширение файла сайта, которое обрабатывается в aspx-файле и возвращает тип содержимого пользовательского файла?

ответ

1

Во-первых, поместите файлы изображений в каталог, к которому пользователь не может напрямую обращаться. Затем измените путь следующим образом: <img src="/Uploads/img.aspx?id=RANDOMGUID" alt="The Moon" title="The Moon"> Таким образом, вы можете получить идентификатор из Request.QueryString ["id"] и выполнить проверку. Это намного проще, чем путь, который вы хотели, потому что он всегда будет идти на ту же страницу aspx. С исходным путем вам нужно будет сделать сопоставление маршрутов и усложнить жизнь без необходимости.

После проверки в базе данных вы можете использовать Response.WriteFile для отправки соответствующего файла. Проверьте https://msdn.microsoft.com/en-us/library/dyfzssz9%28v=vs.110%29.aspx для деталей.

EDIT: Это касалось получения идентификатора изображения. Как отметил @mason, вы должны зарегистрировать обработчик и использовать расширение .ashx, так как вам не нужен просмотр.

+0

Вы не должны использовать ASPX для этого, поскольку просмотр не требуется. Используйте общий обработчик ASHX или зарегистрируйте новый обработчик в файле web.config. – mason

+0

Я полностью согласен. Я отредактировал ответ с этой дополнительной информацией. Благодарю. – Shadowed

+0

То, что я прочитал, похоже, предполагает, что это противоречит RFC и может вызвать проблемы с кешированием. Это что-то интересное? Его одна из причин, почему я предложил иметь GUID на пути. – Dizzle

Смежные вопросы