下面是一些簡單的代碼
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 實體中呢?
另一個問題是,當我運行應用程式時,斷點總是被命中兩次,而不是一次,為什么會這樣,因為只有一個請求,斷點應該只命中一次?
uj5u.com熱心網友回復:
Endpoint類確實沒有RoutePattern屬性,但是它的子類RouteEndpoint有這個屬性(Microsoft.AspNetCore.Routing.RouteEndpoint),當你在它的除錯器中觀看時,你可以看到它。

為什么點擊它兩次,恐怕你的應用程式中有一些其他代碼會導致它,在我新創建的asp.net core MVC應用程式中,當應用程式啟動時,它只點擊一次,但在我的signalr mvc專案中,它由于信號器的連接而命中兩次。所以我認為你需要檢查你的代碼。
順便說一下,這個關于中間件執行順序的檔案可能會有所幫助。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/409260.html
標籤:
