ПО промежуточного слоя OWIN: узнайте, есть ли у запроса совпадающий маршрут

Мы хотели бы написать часть промежуточного программного обеспечения OWIN, которое просматривает текущий запрос и проверяет, соответствует ли он каким-либо сопоставленным маршрутам (мы используем web.api, поэтому мы регистрируем маршруты с помощью метода httpRouteCollection.MapHttpRoute.

Если текущий запрос не соответствует ни одному из известных настроенных маршрутов, мы хотели бы отклонить его с помощью пользовательского сообщения 404.

Можно ли определить из контекста OWIN, соответствует ли текущий запрос одному из определенных маршрутов?


person Aran Mulholland    schedule 21.12.2015    source источник


Ответы (1)


Короткий ответ: нет, вы не можете. Промежуточное ПО OWIN не предназначено для этого. Это не зависит от приложения.

Если вам нужна пользовательская страница ошибки 404, вы можете добавить параметр в файл web.config, чтобы сделать это за вас:

<configuration>
    <system.webServer>
        <httpErrors>
            <error statusCode="404" path="/somedir/oops404.htm" responseMode="ExecuteURL" />
        </httpErrors>
    </system.webServer>
</configuration>

Надеюсь, это поможет.

person MichaelDotKnox    schedule 22.12.2015
comment
Спасибо @MichaelDotKnox. Итак, из того, что вы говорите, я бы подразумевал, что промежуточное программное обеспечение полностью не зависит от архитектуры ASP.NET MVC. Он не знает контекста, в котором он работает. Итак, если я хочу иметь только приемлемые маршруты, а все остальное направлено куда-то еще, я бы либо использовал пользовательскую страницу ошибок в веб-конфигурации, либо выполнил перехват всех маршрутов в таблице маршрутизации и направил его на действие контроллера по моему выбору. Правильный? - person Aran Mulholland; 02.02.2016
comment
@AranMulholland Правильно. OWIN — это просто конвейер для ASP.net, и промежуточное ПО ничего не знает о том, что находится в конце конвейера. Точно так же ASP.net ничего не знает о том, какое промежуточное ПО может работать до или после него. Вот что делает OWIN таким крутым и мощным. Он полностью независим от приложения и сервера. - person MichaelDotKnox; 02.02.2016
comment
Однако у вас есть Owin Context, зависит ли он от того, на какой серверной инфраструктуре вы работаете? Кажется, у него есть информация, касающаяся asp.net, когда это ваша серверная инфраструктура. Я посмотрю еще раз, но, кажется, я помню вещи, которые выглядели так, как будто они были связаны с asp.net. - person Aran Mulholland; 02.02.2016
comment
Это так, но вам не нужно использовать объект OwinContext. То, что получает промежуточное программное обеспечение, на самом деле является Dictionary‹string, object› - person MichaelDotKnox; 02.02.2016
comment
У меня тот же вопрос, но с консольным приложением OWIN. Вы знаете, что такое эквивалентное решение? - person Zach Smith; 08.09.2017
comment
@ZachSmith Вы можете написать собственное промежуточное программное обеспечение для этого и получить список конечных точек, используя отражение во время инициализации. Было бы проще, если бы вы использовали маршрутизацию атрибутов. - person MichaelDotKnox; 08.09.2017