2016-11-03 1 views
0

Я хотел бы настроить мой проект, чтобы не позволить запросы HTTP со следующими ограничениями:Force ASP .Net Web API, чтобы блокировать HTTP запросы с сообщением об ошибке (403)

  1. Он должен быть глобальным ограничением для всех интерфейсов (через web.config, скрипт в установщике и т. д.)
  2. Он должен быть жестко закодирован (не нажимать «Требовать SSL» на APP в IIS)
  3. Нет «перенаправления» - просто вернуть ошибку (403)

мой идеальный вариант woul d настроить «Требовать SSL» скриптом, который запускается в установщике.

+1

Вы пробовали что-нибудь? Что работает или не работает? – CGritton

+0

глобальный фильтр действий, который проверяет схему входящих запросов и возвращает 403, если не https. – Nkosi

ответ

1

Это может быть сделано путем написания простого ActionFilter, который проверяет запрос и отвечает, когда схема не установлена ​​на ssl. Очень минимальная реализация может выглядеть примерно так:

public class RequireHttpsAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(HttpActionContext actionContext) 
    { 
     if (actionContext.Request.RequestUri.Scheme != Uri.UriSchemeHttps) 
     { 
      actionContext.Response = new HttpResponseMessage(HttpStatusCode.Forbidden); 
     } 
    } 
} 

Чтобы сделать это можно применить везде, вы, вероятно, хотите, чтобы зарегистрировать его в качестве глобального фильтра в конфигурации WebAPI, когда ваше приложение самонастройки. Это будет выглядеть примерно так:

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     config.Filters.Add(new RequireHttpsAttribute()); 

     // ... More configuration ... 
    } 
} 

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

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