Asp.net web api OWIN中间件:查找请求是否有匹配的路由

Asp.net web api OWIN中间件:查找请求是否有匹配的路由,asp.net-web-api,owin,asp.net-web-api-routing,owin-middleware,Asp.net Web Api,Owin,Asp.net Web Api Routing,Owin Middleware,我们想编写一个OWIN中间件,查看当前请求,看看它是否匹配任何映射路由(我们使用的是web.api,因此我们使用httpRouteCollection.maphttprote方法注册路由) 如果当前请求与任何已知配置的路由不匹配,我们将使用自定义404消息拒绝它 是否可以从OWIN上下文中确定当前请求是否与定义的路由之一匹配?简短的回答是,不,您不能。OWIN中间件并不是为此而设计的。它独立于应用程序 如果您想要自定义404错误页面,可以在web.config文件中添加一个设置来执行此操作: &

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

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


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

简短的回答是,不,您不能。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体系结构。它不知道它运行的上下文。因此,如果我只想有可接受的路由,其他所有内容都指向其他地方,我会使用自定义错误pag在web配置中使用e或执行“全面覆盖”在路由表中路由并将其定向到我选择的控制器操作。正确吗?@AranMulholland正确。OWIN只是到ASP.net的一个管道,中间件不知道管道末尾的内容。同样,ASP.net也不知道在它之前或之后运行的中间件。这就是OWIN的原因很酷,功能强大。它完全独立于应用程序和服务器。不过,您确实有Owin上下文,这是否取决于您运行的服务器基础结构?当asp.net是您的服务器基础结构时,它似乎有与asp.net相关的信息。我将再看一看,但我似乎记得那些看起来像的东西我觉得它与asp.net相关。是的,但你不需要使用OwinContext对象。中间件接收到的实际上是一个字典。我有同样的问题,但使用了托管在OWIN应用程序中的控制台。你知道等效的解决方案是什么吗?