1

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

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

можно ли определить из контекста Owin ли текущие матчи запроса один из определенных маршрутов?

ответ

2

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

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

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

Надежда, что помогает.

+0

Спасибо @MichaelDotKnox. Поэтому из того, что вы говорите, я подразумеваю, что промежуточное ПО полностью не зависит от архитектуры ASP.NET MVC. Он не знает, в каком контексте он работает. Поэтому, если я хочу иметь только приемлемые маршруты и все остальное, направленное куда-то еще, я бы либо использовал пользовательскую страницу ошибок в веб-конфигурации, либо выполнил маршрут «поймать все» в таблице маршрутизации и направил ее на действие контроллера по моему выбору , Верный? –

+0

@AranMulholland Исправить. OWIN - это просто конвейер для ASP.net, и промежуточное программное обеспечение ничего не знает о том, что находится в конце конвейера. Также ASP.net ничего не знает о том, какое промежуточное ПО может работать до или после него. Это делает OWIN таким классным и мощным. Он полностью не зависит от приложения и сервера. – MichaelDotKnox

+0

У вас есть Owin Context, хотя это зависит от того, на какой серверной инфраструктуре вы работаете? Кажется, у него есть информация, относящаяся к asp.net, когда это ваша инфраструктура сервера. У меня будет другой взгляд, но я, кажется, помню вещи, которые выглядели так, как будто это связано с asp.net. –