RoutePattern 如何添加到 Endpoint 对象
How RoutePattern is added to an Endpoint object
下面是一些简单的代码
public class Startup {
public void ConfigureServices(IServiceCollection services) {
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) {
app.UseDeveloperExceptionPage();
app.UseRouting();
app.Use(async (context, next) => {
var endpoint = context.GetEndpoint(); // <--------I put a debugger here
await next();
});
app.UseEndpoints(endpoints => {
endpoints.MapGet("routing", async context => {
await context.Response.WriteAsync("Request Was Routed");
});
});
app.Use(async (context, next) => {
await context.Response.WriteAsync("Terminal Middleware Reached");
});
}
}
遇到断点时,我可以看到一些属性已添加到 Endpoint 实例中,例如 RoutePattern 属性
但是Endpoint
没有RoutePattern属性:
public class Endpoint {
public Endpoint(RequestDelegate requestDelegate, EndpointMetadataCollection metadata, string displayName);
public string DisplayName { get; }
public EndpointMetadataCollection Metadata { get; }
public RequestDelegate RequestDelegate { get; }
public override string ToString();
那么RoutePattern属性是如何添加到Endpoint实例中的呢?
另一个问题是,当我运行应用程序时,断点总是命中两次,而不是一次,这是为什么,因为只有一个请求,断点应该只命中一次?
Endpoint
class确实没有RoutePattern
属性,但是childclassRouteEndpoint
有这个属性(Microsoft.AspNetCore.Routing.RouteEndpoint),当你在debugger的时候看,就可以看到了。
为什么要点击两次,恐怕是你的应用程序中有其他代码导致的,在我新创建的 asp.net 核心 MVC 应用程序中,当应用程序启动时,它只点击了一次,但是在我的signalr mvc项目中,因为连接了signalr,所以命中了两次。所以我认为你需要检查你的代码。
顺便说一句,这篇关于 middleware execution order 的文档可能会有所帮助。
下面是一些简单的代码
public class Startup {
public void ConfigureServices(IServiceCollection services) {
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) {
app.UseDeveloperExceptionPage();
app.UseRouting();
app.Use(async (context, next) => {
var endpoint = context.GetEndpoint(); // <--------I put a debugger here
await next();
});
app.UseEndpoints(endpoints => {
endpoints.MapGet("routing", async context => {
await context.Response.WriteAsync("Request Was Routed");
});
});
app.Use(async (context, next) => {
await context.Response.WriteAsync("Terminal Middleware Reached");
});
}
}
遇到断点时,我可以看到一些属性已添加到 Endpoint 实例中,例如 RoutePattern 属性
但是Endpoint
没有RoutePattern属性:
public class Endpoint {
public Endpoint(RequestDelegate requestDelegate, EndpointMetadataCollection metadata, string displayName);
public string DisplayName { get; }
public EndpointMetadataCollection Metadata { get; }
public RequestDelegate RequestDelegate { get; }
public override string ToString();
那么RoutePattern属性是如何添加到Endpoint实例中的呢?
另一个问题是,当我运行应用程序时,断点总是命中两次,而不是一次,这是为什么,因为只有一个请求,断点应该只命中一次?
Endpoint
class确实没有RoutePattern
属性,但是childclassRouteEndpoint
有这个属性(Microsoft.AspNetCore.Routing.RouteEndpoint),当你在debugger的时候看,就可以看到了。
为什么要点击两次,恐怕是你的应用程序中有其他代码导致的,在我新创建的 asp.net 核心 MVC 应用程序中,当应用程序启动时,它只点击了一次,但是在我的signalr mvc项目中,因为连接了signalr,所以命中了两次。所以我认为你需要检查你的代码。
顺便说一句,这篇关于 middleware execution order 的文档可能会有所帮助。