Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么自定义中间件仍在运行?_C#_.net_.net Core_Asp.net Core 2.1 - Fatal编程技术网

C# 为什么自定义中间件仍在运行?

C# 为什么自定义中间件仍在运行?,c#,.net,.net-core,asp.net-core-2.1,C#,.net,.net Core,Asp.net Core 2.1,平台 .Net核心2.2 Web应用程序 场景 我编写了一些自定义中间件,目的是仅在请求路径与指定位置匹配时执行。当它运行时,它从数据库中进行查找并检查一段数据。在某些情况下,中间件会将用户重定向到新的url,而不是让他们查看请求的url 问题 中间件似乎被缓存了或者其他什么东西。我不明白。当我请求应该可以工作的localhost:6000/url时,我神奇地在另一个url上得到了错误的页面。然而,当我使用Fiddler时,它不是重定向。这就像是我实际要求的页面。奇怪的是a)我在Startup.

平台

.Net核心2.2 Web应用程序

场景

我编写了一些自定义中间件,目的是仅在请求路径与指定位置匹配时执行。当它运行时,它从数据库中进行查找并检查一段数据。在某些情况下,中间件会将用户重定向到新的url,而不是让他们查看请求的url

问题

中间件似乎被缓存了或者其他什么东西。我不明白。当我请求应该可以工作的
localhost:6000/url时,我神奇地在另一个url上得到了错误的页面。然而,当我使用Fiddler时,它不是重定向。这就像是我实际要求的页面。奇怪的是a)我在
Startup.cs
中注释了我的中间件代码,b)当我进入匿名模式时,行为按预期工作。此外,如果我将调试端口更改为其他端口,它也可以工作。此外,当我在中间件中放置断点时,如果我转到应该工作的
/url,则请求路径是错误的url

代码

Startup.cs

app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseAuthentication();

//app.UseEndpointRouting();
//app.UseWhen(context => context.Request.Path.StartsWithSegments("/move/booking"), appBuilder =>
//{
//    appBuilder.UseMoveBookingWorkflowPermission();
//});

app.UseMvc();
不应执行的中间件重定向行

context.Response.Redirect(context.Request.PathBase + previousPath + context.Request.QueryString, true);

根据.Net核心文档

您的中间件的顺序可以更改其功能, 安全性性能

例如,在此配置中,在Startup.cs

public void Configure(IApplicationBuilder app)
{

app.UseStaticFiles();

app.UseResponseCompression();

app.UseEndpoints(endpoints =>
{
    endpoints.MapRazorPages();
});
}
静态文件不使用此中间件顺序进行压缩。这些响应可以被压缩。这个简单的例子展示了功能将如何改变。 在Configure方法中,它可以做出响应,也可以将请求传递给下一个中间件

var options = new RewriteOptions()
.AddRewrite(//some options);
app.UseRewriter(options);
如果仍然存在问题,可以重写URL中间件

var options = new RewriteOptions()
.AddRewrite(//some options);
app.UseRewriter(options);

希望能有帮助

根据.Net核心文档

您的中间件的顺序可以更改其功能, 安全性性能

例如,在此配置中,在Startup.cs

public void Configure(IApplicationBuilder app)
{

app.UseStaticFiles();

app.UseResponseCompression();

app.UseEndpoints(endpoints =>
{
    endpoints.MapRazorPages();
});
}
静态文件不使用此中间件顺序进行压缩。这些响应可以被压缩。这个简单的例子展示了功能将如何改变。 在Configure方法中,它可以做出响应,也可以将请求传递给下一个中间件

var options = new RewriteOptions()
.AddRewrite(//some options);
app.UseRewriter(options);
如果仍然存在问题,可以重写URL中间件

var options = new RewriteOptions()
.AddRewrite(//some options);
app.UseRewriter(options);
希望能有帮助

这是一个“我很愚蠢”的时刻。问题是,当我重定向响应时,我指定希望它是永久的

旧的

context.Response.Redirect(context.Request.PathBase + previousPath + context.Request.QueryString, true);
新的

context.Response.Redirect(context.Request.PathBase + previousPath + context.Request.QueryString, false);
这是一个“我很愚蠢”的时刻。问题是,当我重定向响应时,我指定希望它是永久的

旧的

context.Response.Redirect(context.Request.PathBase + previousPath + context.Request.QueryString, true);
新的

context.Response.Redirect(context.Request.PathBase + previousPath + context.Request.QueryString, false);

您面临的问题可能是由浏览器缓存引起的。为什么不尝试在响应中添加一个可以禁用缓存的头?@HirasawaYui我不知道浏览器如何缓存代码,但这就是它看起来的行为。你知道我会把头球放在哪里,或者它会是什么样子吗?我对自定义中间件有点陌生。您是否在启动结束时配置中间件?在route或MVC配置后的末尾添加中间件。@James没关系,即使是最好的开发人员有时也会犯愚蠢的错误。您面临的问题可能是由浏览器缓存引起的。为什么不尝试在响应中添加一个可以禁用缓存的头?@HirasawaYui我不知道浏览器如何缓存代码,但这就是它看起来的行为。你知道我会把头球放在哪里,或者它会是什么样子吗?我对自定义中间件有点陌生。你是在启动结束时配置中间件的吗?在route或MVC配置结束后添加中间件。@James没关系,即使是最好的开发人员有时也会犯愚蠢的错误