所以我希望IIS在请求某些网址时基本上什么都不做,因为我想要从服务器端渲染我的反应路由器来处理请求。
使用此link
我创建了一个检查每个请求的中间件。现在,一旦找到正确的网址,我就不知道如何忽略或中止此请求。
Frontend.csproj
答案 0 :(得分:4)
如果要停止请求,请不要调用next.Invoke(context)
,因为这将调用管道中的下一个中间件。不调用它,只是结束请求(以及之前的中间件代码将在next.Invoke(context)
处理之后)。
在你的情况下,只需将调用移到else分支或只是否定if表达式
public class IgnoreRouteMiddleware
{
private readonly RequestDelegate next;
// You can inject a dependency here that gives you access
// to your ignored route configuration.
public IgnoreRouteMiddleware(RequestDelegate next)
{
this.next = next;
}
public async Task Invoke(HttpContext context)
{
if (!(context.Request.Path.HasValue && context.Request.Path.Value!="/"))
{
await next.Invoke(context);
}
}
}
另外,请务必阅读ASP.NET Core Middleware文档,以便更好地了解中间件的工作原理。
中间件是组装到应用程序管道中以处理请求和响应的软件。每个组成部分:
- 选择是否将请求传递给管道中的下一个组件。
- 可以在调用管道中的下一个组件之前和之后执行工作。
但是如果你想要服务器端渲染,可以考虑使用微软的JavaScript/SpaServices库,它已经内置在较新的模板(ASP.NET Core 2.0.x)中,并注册了一个后备路由,如。
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
routes.MapSpaFallbackRoute(
name: "spa-fallback",
defaults: new { controller = "Home", action = "Index" });
});
新模板还支持热模块更换