我是ASP.NET 5和中间件类的新手。我正在尝试创建的是一个中间件类,它读取传入的URL请求。基于此,我要么让它通过并进行正常的路由查找,或者我希望我的中间件类从我的Web API类调用特定的控制器/操作。
我目前拥有的是以下内容。我认为代码中的注释解释了我想要实现的目标。
public class RouteMiddleware
{
private readonly RequestDelegate _next;
public RouteMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext httpContext)
{
if(httpContext.Request.QueryString.Value == "test")
{
// Call custom Controller / Action
// Then, don't do any more route resolving, since we already have the right controller/action
}
else
{
// Continue like normal
await _next.Invoke(httpContext);
}
}
}
我如何在中间件类中执行此操作?
答案 0 :(得分:1)
我认为这样做的一种方法是拥有自己的IRouter实现。 以下是我作为测试使用自己的RouteHandler所做的事情,对我来说效果很好。
在console.log(Object.getOwnPropertyDescriptor(numberOfRows, "count"));
的{{1}}方法中使用了Mynamespace.MvcRouteHandler
,并将方法重命名为UseMvc
。
MvcApplicationBuilderExtensions
在Startup.cs中,将UseMyMvc
更改为public static IApplicationBuilder UseMyMvc(this IApplicationBuilder app,Action<IRouteBuilder> configureRoutes)
{
MvcServicesHelper.ThrowIfMvcNotRegistered(app.ApplicationServices);
var routes = new RouteBuilder
{
DefaultHandler = new MyNamespace.MvcRouteHandler(),
ServiceProvider = app.ApplicationServices
};
//..... rest of the code of this method here...
}
然后在app.UseMvc
的{{1}}方法中,根据自定义逻辑设置控制器和操作。
app.UseMyMvc
答案 1 :(得分:0)