【问题标题】:OWIN Middleware: find if the request has a matched routeOWIN 中间件:查找请求是否有匹配的路由
【发布时间】:2016-03-27 15:49:50
【问题描述】:

我们想编写一个 OWIN 中间件,查看当前请求并查看它是否匹配任何映射的路由(我们使用 web.api,因此我们使用 httpRouteCollection.MapHttpRoute 方法注册路由。

如果当前请求与任何已知的配置路由不匹配,我们希望使用自定义 404 消息拒绝它。

是否可以从 OWIN 上下文中确定当前请求是否与定义的路由之一匹配?

【问题讨论】:

    标签: asp.net-web-api owin asp.net-web-api-routing owin-middleware


    【解决方案1】:

    简短的回答是,不,你不能。 OWIN 中间件并非专门为此而设计的。它独立于应用程序。

    如果您想要自定义 404 错误页面,您可以在 web.config 文件中添加一个设置来为您执行此操作:

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

    希望对您有所帮助。

    【讨论】:

    • 谢谢@MichaelDotKnox。所以从你所说的我会暗示中间件完全独立于 ASP.NET MVC 架构。它不知道它正在运行的上下文。因此,如果我只想有可接受的路由,而其他所有内容都指向其他地方,我要么在 Web 配置中使用自定义错误页面,要么在路由表中执行“catch all”路由并将其定向到我选择的控制器操作.对吗?
    • @AranMulholland 正确。 OWIN 只是通往 ASP.net 的管道,中间件对管道末端的内容一无所知。同样,ASP.net 对在它之前或之后可能运行的中间件一无所知。这就是 OWIN 如此酷炫和强大的原因。它完全独立于应用程序和服务器。
    • 您确实拥有 Owin 上下文,这取决于您运行的服务器基础架构是否有所不同?当那是您的服务器基础架构时,它似乎有与 asp.net 相关的信息。我会再看一遍,但我似乎记得一些看起来与 asp.net 相关的东西。
    • 可以,但不需要使用 OwinContext 对象。中间件收到的实际上是一个 Dictionary
    • 我有同样的问题,但使用的是控制台托管的 OWIN 应用程序。你知道等效的解决方案是什么吗?
    猜你喜欢
    • 2016-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-15
    • 2016-09-26
    相关资源
    最近更新 更多