从中间件调用控制器的动作方法 [英] Call controller's action method from middleware
本文介绍了从中间件调用控制器的动作方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的中间件类在不同的类库项目中,控制器在不同的项目中。我尝试做的是,如果特定条件不满足,则从中间件重定向到自定义控制器/操作方法。
但是,我无法使用Response.ReDirect方法执行此操作。
如何在中间件类中执行此操作?
如有任何帮助,我将不胜感激!
RoHit
推荐答案
您似乎出于错误的原因使用了中间件。
我建议您或者让中间件通过简单地将其写入响应流(而不是转发到Next()
)来返回(非常小的)404,或者根本不在中间件中执行此操作,而是在MVC应用程序中全局注册的IActionFilter
中执行此操作。
我已经在评论中解释了上述建议的理由,但我认为它足够重要,可以提升到实际答案中:
在中间件管道中,您希望每个组件尽可能独立。在OWIN中实现这种松散耦合的原因有两点:
每个组件的输入和输出都具有相同的格式,无论它之前是否有10个其他中间件组件,或者根本没有中间件组件
惯例是管道的每个部分都可以执行以下三项操作中的一项或多项:
读取(和修改)传入请求。
决定完全处理该请求,或将处理转发到下一个组件。
写入响应流。
/li>
ASP.NET WebAPI看起来可能是一头不同的野兽,但实际上它只是另一个OWIN组件,它总是被配置为处理请求,并且永远不会转发到下一个组件(因此,它们使得在管道中注册WebApi之后的组件变得困难...)。
您尝试做的事情打破了第二点的约定--您想要告诉下一个组件如何处理请求。但这不由您决定-这取决于下一个组件。
这篇关于从中间件调用控制器的动作方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文